永发信息网

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

答案:3  悬赏:10  手机版
解决时间 2021-06-07 08:17
//输入一行字符,统计其中单词的个数,各单词之间用空格分隔,空格可以有多个
#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);
}
最佳答案

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


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


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


全部回答

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

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); }

望采纳!

#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); }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
梦想世界 在南天门
帮帮忙、救救命
怀孕刚满一月可以药物流产吗
第27届金鸡奖的影帝和影后?
风门开着骑车有什么影响?
我有一个问题请问大家,请你们给点意见,怎样
誰有吉他的音譜?
有什么既免费,又实用的杀毒软件
雨花区长沙雨花亭派出所户籍室地址是什么,有
感觉孤独怎么办
DNF一些关于漫游得问题....
关于杀毒软件装机的
DNF比赛的时候人物复制进PK服,全身装备全部
头上难闻,每天都洗怎么办?
孩子为什么到晚上哭得特厉害
推荐资讯
我要画美女啊
襄城区襄樊盈家房产在哪里啊,我有事要去这里
如何在手机上安装万能播放器
新洲区武汉阳逻大桥管理所这个地址在什么地方
谁来我的空间为梁静茹宁波杭州演唱会加油
帮忙查询这个专利号:zl200930186931.5是什么
索爱W910看小说要下什么格式的?
原子团的符号后面为什么没有+、2-、3-之类的
如何翻译“王使人为冠,不使左右便避而使工者
新邵县邵阳胜木匠家具店地址在哪里啊
美国的第2语言是不是西班牙语?
微信被投诉了怎么解除,陌陌被人举报怎么取消
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?