求C++高手!

#include <stdio.h>
main()
{
char string[100];
int i,count=0,flag=0;
char c;
gets(string);
for(i=0;(c=string[i]!='\0');i++)
if(c==' ')flag=0;
else if(flag==0)
{
flag=1;count++;
}
printf("有%d个单词\n",count);
}
为什么不管输多少单词其结果都显示的是一个?还有能不能帮我解释下if后面的那些语句?我知道flag是标志,但是还是不懂意思。

问题出在你的for循环

for(i=0;(c=string[i]!='\0');i++)

 (c=string[i]!='\0');

分析这句

赋值语句是最后实现的,所以相当于c=(string[i]!='\0'),所以c是么是0,要么是1,

但你目的是先把字符赋给变量c,再比较c是不是字符串结束符 '\0'

所以要改成:(c=string[i])!='\0'

 

for(i=0;((c=string[i])!='\0');i++)

这样就是你需要的结果了。

 if(c==' ')

   flag=0;

出现空格时, 标志设为0,

else if(flag==0)

空格之后肯定是单词了,所以单词计数变量count++

同时将标志设回1,表示这不是空格了。

结果:

追问

非常感谢!请问这又事怎么回事阿?我经常遇到这样的问题。还有我觉得赋值应该是 c=string[i]才想得通阿。

追答

char c=string[i]!='\0';
这句去掉后面的string[i]!=0
变成
char c;
c这个变量是跟着循环变动的
他就是string[i],i变化,string[i]就跟着变化
c=string[i]则跟着变化
(c=string[i])!='\0'
这句目的就是根据i的变化,把string[i]的值赋给c
再看他是不是等于'\0',是的话就中止循环
另外
我刚才说的,你怎么不改
for语句要改成:
for(i=0;((c=string[i])!='\0');i++)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-21
(c=string[i]!='\0') 表示空格结束,如果想显示很多 改为(c=string[i]!='\n') flag 用于计算空格有多少