//*****怎么不结束循环啊???**********
- 提问者网友:精神病院里
- 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); }