#include<stdio.h>
int main()
{
intword,num=0;
char ch;
while((ch=getchar())!='\n')
{
if(ch=='')
word=0;
else
{
if(word==0)
{
num++;
word=1;
}
}
}
printf("%d",num);
return0;
}
分析
若当前字符=空格
YESﻩ未出现新单词,使word=0,num不累加
NOﻩ前一字符为空格(word=0),新单词出现,使num加1,word=1
前一字符为非空格(word=1),未出现新单词,num不加1*/
其它方法:
#include<stdio.h>
int 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;
elseif(word==0)
{
word=1;
num++;
}
printf("thereare%dwordsinthisline.\n",num);
return0;
}
#include
int 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);
return 0;
}
这为朋友,很少在电脑上调程序吧,这段程序中有一些值得注意的错误。首先,标准输入输出头文件是#include
下面是我改好的程序:
#include
main()
{
char string[81];
int i,num=0,word=0;
char s;
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);
}
好了,言归正传。这段程序有个值得注意的问题,for循环没有大括号,意味着它包含一个if-else语句,if语句中是c=' '表示一个单词的结束,然后用word标记,word=0时表示有一个完整的单词。当读入到下一个字母时,表示又有一个新的单词,所以if(word==0)时,num++,同时将word取消标记准备下一次标记。比如说:
输入I am a boy.
I读入:因为word==0 所以num=1,word=1
读入一个空格:word=0 说明第一个单词读入完毕
a读入:因为word==0 所以num=2,word=1 说明有第二个单词
m读入:word=1 说明第二个单词未读完
读入一个空格 word=0 说明第二个单词读入完毕
a读入 因为word=0 说明有第三个单词 所以 num=3,word=1
以此类推,得到结果为4
你弄的太乱,我整理了一下:
#include
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);
}
你说的这句
if(c==' ') word=0;
else if(word==0){
word=1;
num++;
}
当c=空格时,令word=0;不执行else if语句
直到c!=空格时(注意连续多个空格的处理),不执行if语句,执行else if语句
由于前面令word=0,所以到空格后第一非空格字符时,word是=0的,else if判断成功,
执行word=1; num++;,第二个非空格字符时,word就=1了,就不执行word=1; num++;了
这样一个单词num就加一次
由于初始时令word=0,故第一单词的第一个字母时,num就等于1了
好了,就说这么多,不懂再问我
首先要知道C中选择控制语句if--else语句的配对,C语言规定else与其前面最近的一个没有配对的if成对。这题中很显然第一个if与下面的else配对。第一个if语句意思是说:如果C中的值是‘空格’则将0值给word,下面紧跟着一个else,如果C中的值不是空格,就执行第二个if。第二个if意思是说如果word中的值是哦,就把1给word,然后对num加一。
理解上面的关系你就很容易理解这里面变量word的含义了。其实word这个变量仅仅是一个单词输入完的一个标志。当输入一个单词,输入空格时,程序中word等于0,接着执行else,直接转入执行第二个if,此时判断word是不是等于0,如果等于零说明C中的值是空格,及一个单词已经输入完,此时就对word置一,为下次判断做准备,然后对num加一。如果再输入一个新的单词,当没有输完时,及C中的值不是空格,此时第一个if不执行,执行else,接着又执行第二个if。但此时word的值是1,因此第二个if也不执行,即num不会加一。
体会一下吧,希望对你有所帮助。