下面代码哪错了?

如题所述

注意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;

}

运行结果如下:

符合示例输出

追问

加了大括号还是不对,输入“stable marriage  problem Consists     of Matching members   ”,正确的是输出7,但是输出的是8

追答

因为数组a将输入的字符串是否为空格处理为0和1
所以判断最后一位是否是空格时
应该将
if (a[num - 1] == ' ')
改为
if (a[num - 1] == 0)
这样输出就正确了

温馨提示:答案为网友推荐,仅供参考
相似回答