永发信息网

//*****怎么不结束循环啊???**********

答案:3  悬赏:10  手机版
解决时间 2021-06-07 08:17
  • 提问者网友:精神病院里
  • 2021-06-06 14:12
//输入一行字符,统计其中单词的个数,各单词之间用空格分隔,空格可以有多个
#include "stdio.h"
char ch[1000];
int n,p,sum=0;
void main()
{printf("开始统计单词的个数......\n");
for(int i=0;ch[i]!='\n';i++)//*****怎么不结束循环啊???**********
ch[i]=getchar();
p=i;
printf("%d",p);
for(i=0;i<=p;i++){
if(ch[i]!=' '&& ch[i+1]==' ') sum++;
}
printf("单词个数为:%d\n",sum);
}
最佳答案
  • 五星知识达人网友:掌灯师
  • 2021-06-06 14:56

原因很简单,ch[i]一直不等于'\n'


你想想,你在for循环里给chi[i] = getchar()赋值后,接下来i就加1了,于是此时的ch[i]是没有赋值的,因此自然不等于'\n'了。


你可以在循环里加上一个 if( ch[i] =='\n' ) break;


全部回答
  • 1楼网友:罪歌
  • 2021-06-06 17:28

你这段代码有这么几个错误:

1。if里面的逻辑运算符错误,不应该用&&而应该用|| 。还有第一个=应该是==

2。if里的两个判断条件也不对,正确的逻辑应该是:遇到空格或者'\n'则单词数+1

写法为 if( ch[i] == '' || ch[i] == '\n' )

3。即使这样判断,你也无法处理连续两个空格出现的情况。判断的逻辑应该是:前一个字符不为空格,当前字符为空格或者'\n'

4。此外还有一个数组越界:

for(int i=0;ch[i-1]!='\n';i++)

这一句其实很危险,当i = 0时,程序会去判断 ch[i-1] != '\n',这时候下标是-1,

给你我写的一个示例:

void main() { char ch[1000];

int i = 0; int s =0; char c = ' '; while(c != '\n') { c=getchar(); ch[i++] = c; } for(int p=1;p< i;p++) if(ch[p-1] != ' ' && (ch[p]==' ' || ch[p]=='\n')) { s++; } printf("%d\n",s); }

  • 2楼网友:酒醒三更
  • 2021-06-06 16:16

望采纳!

#include "stdio.h"

char ch[1000]; int n,p,sum=0;

void main() { printf("开始统计单词的个数......\n"); for(int i=0;ch[i-1]!='\n';i++)//因为getchar()后i会+1.所以要判断前一个字符是否回车符. ch[i]=getchar(); p=i-1; //由于获取了回车并保存到字符串中.所以将字符串的长度-1,就是不计算回车; printf("%d\n",p); for(i=0;i<=p;i++) { //存在最后一个单词输入后直接回车的情况.所以要判断下后一个字符是否回车.否则单词个数会少1. if(ch[i]!=' '&&( ch[i+1]==' '||ch[i+1]=='\n')) sum++; } printf("单词个数为:%d\n",sum); }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯