c语言初级题目求解

来源:百度知道 编辑:UC知道 时间:2024/05/21 15:46:05
题目: 例7.8 输入一行字符,统计其中有多少个单词,单词之间用空格分 隔开。

下面是书后的答案,我输入测试过,但运行出错。
请问何处出错,或是有其它编法吗?

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
char string[81];
int i,num=0,word=0;
char c;
scanf("%s",&string);
for(i=0;(c=string[i])!='\0';n++,i++)
if(c==' ') word==0;
else if(word==0)
{
word=1;
num++;
}
printf("there are %d words in the line.\n",num);

}
嗯,首先我先说我是新手。
对不起,我把‘num’抄错成‘n’将如二楼所说的,
但本质问题似乎不在此。
即使此解法不是最佳的解法,但至少能测出有多少个空格吧。
但改了还不行。我想问的正是为何测不出正确的空格数。

其它的错误先不管它吧

二楼的回答对了一半,但是回答后面的观点显然是没看清楚题目意思。

题目说的很明白了,“单词之间用空格分隔开”!而且,这里也不是统计空格的个数,空格只是让标志变量word变为0而已。

如果编译不通过,请仔细看VC6下面的输出问题;如果运行弹出内存不能写,请参照下面代码。

算法的思想是:
1.利用word作为标志,当有空格的时候,将word清零。
2.当得到的不是空格的时候,检查word的值。如果word为0,则单词数加一,并且将word置为1;如果word不为0,则说明这个单词已经统计过了,不必再统计,直接无视。
3.重复上面两步,直到字符串读入结束。

楼主代码错误有两个:
1.string是数组名,其本身就代表了地址,不必再加&符号。如果真的想加,可以写成 &string[0]。
2.如二楼说的,写错变量名。

代码修改如下:

#include "stdio.h"
void main()
{
char string[81];
int i,num=0,word=0;
char c;
scanf("%s",string); //←去掉&
for(i=0;(c=string[i])!='\0';num++,i++) //←修改了变量名
if(c==' ') word==0;
else if(word==0)
{
word=1;
num++;
}
printf("there are %d words in the line.\n",num);

}

改成:

/* Note:Your choice is C IDE */
#include "stdio.h"<