下面代码哪错了?

 我来答
xgn911
2022-10-07 · TA获得超过1364个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:653万
展开全部

注意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)
这样输出就正确了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式