一个很简单的C程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 12:18:03
#include<stdio.h>
void main()
{
char string[81];
int i,num =0,word=0;
char c;
gets(string);
for(i=0;c=string[i]!='\0';i++)
if(c==' ')
word=0;
else if(word==0)
{
word=1;
num++;
}
printf ("There are %d words in the line.\n",num);
}
当我输入一句话时,总是输出There are 1 words in the line.
我明明没有只输入一个单词啊,我晕了,我就是随便抄了个小程序,却浪费我很多时间去想这个,谢谢各位帮我看看!!

for(i=0;c=string[i]!='\0';i++)
if(c==' ')
word=0;
else if(word==0)
{
word=1;
num++;
}
应该改为
for(i=0;string[i]!='\0';i++)
{
c=string[i];
if(c==' ')
word=0;
else if(word==0)
{
word=1;
num++;
}
}
在原来的程序中for(i=0;c=string[i]!='\0';i++) c=string[i]!='\0'执行顺序为string[i]!='\0',再将此关系运算结果赋值给c,这就导致了错误,原来是想将string[i]赋值给c,现在C只得到了0或1(关系运算值),故错误,把赋值写在循环体内比较好,一般不要按c=string[i]!='\0'写程序,容易错误,拆开来写比较好,不会出错.

#include<stdio.h>
void main()
{
char string[81];
int i,num =0,word=0;
gets(string);
for(i=0;string[i]!='\0';i++)
if(string[i]==' ')
word=0;
else //if(word==0)
{
word=1;
num++;
}
printf ("There are %d words in the line.\n",num);
}

注: 去掉if(word==0) 和 c