while循环里的printf语句双重输出

题目:编写一个程序读取字符输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量

#include<stdio.h>
int main() {
    int num1 = 0, num2 = 0, num3 = 0;//依次表示空格数,换行符数、所有其他字符的数量为0
    char ch;
    while (1) {
        printf("输入字符:");
        scanf("%c", &ch);
        if (ch == '#')
            break;//如果输入#,则会跳出整个循环
        if (ch == ' ')
            num1++;
        if (ch == '\n')
            num2++;
        else num3++;
    }
    printf("空格数为%d,换行符数为%d,所有其他字符数为%d", num1, num2, num3);
    return 0;
}

debug:

img

我们可以看到除了第一行外,其余行每行都有两次printf语句输出,可是循环里面只有一个printf语句,为什么到了第二行每输入一个字符后按回车键就会连着出现两次printf中的语句?

你好,要处理一下按下的回车键,不然就会把回车键存入到ch中,进入下一次循环了。

printf("输入字符:");
scanf("%c", &ch);
getchar();

觉得有用的话采纳一下哈

scanf("%c")输入字符后,加一句getchar();

修改如下,供参考:

#include<stdio.h>
int main() {
    int num1 = 0, num2 = 0, num3 = 0;//依次表示空格数,换行符数、所有其他字符的数量为0
    char ch;
    while (1) {
        printf("输入字符:");
        ch = getchar();//scanf("%c", &ch); scanf()不读入空格
        getchar();     //吸收缓冲区剩余的字符
        if (ch == '#')
            break;//如果输入#,则会跳出整个循环
        if (ch == ' ')
            num1++;
        if (ch == '\n')
            num2++;
        else num3++;
    }
    printf("空格数为%d,换行符数为%d,所有其他字符数为%d", num1, num2, num3);
    return 0;
}