下面代码哪错了?
注意C语言的风格和python不同
函数作用范围不靠缩进,而靠大括号{}
所以图中的while循环只能作用到第一句if...else...的判断,作用不到num++
应改写为:
while (ch = getchar(), ch != '\n') {
if (ch == ' ') a[i++] = 0;
else a[i++] = 1;
num++; // 写进while循环里
}
对于if、while、for等语句,如果其作用范围内有条语句,要用{}括起来
其实对于该题可以不用逐字符读入,用fgets()函数能直接读入包含空格的字符串
直到遇到'\n'为止,但注意'\n'也会读入,代码如下:
#include <stdio.h>
#include <string.h>
int main() {
char s[1000];
fgets(s, 1000, stdin); // 注意结尾的'\n'也会读入
int n = strlen(s); // 包括结尾的'\n'
int i, word = 0;
for (i = 0; i < n - 1; i++) {
if (s[i] != ' ' && (s[i + 1] == ' ' || s[i + 1] == '\n'))
word++;
}
printf("%d\n", word);
return 0;
}
运行结果如下:
符合示例输出
因为数组a将输入的字符串是否为空格处理为0和1
所以判断最后一位是否是空格时
应该将
if (a[num - 1] == ' ')
改为
if (a[num - 1] == 0)
这样输出就正确了