为什么会自行跳过用户输入然后多输出一次

输入字符,直到输入#结束但程序每次都多输出一次

img

#include <stdio.h>
void main()
{
char ch;
do{
printf("请输入一个字符:");
scanf("%c",&ch);
if(ch>='A'&&ch<='Z')
printf("大写字母");
else if(ch>='a'&&ch<='z')
printf("小写字母");
else if(ch>='0'&&ch<='9')
printf("数字");
else
printf("其他");}while(ch !='#');
}

因为上一次用户输入了一个字符和换行符‘\n’,在读取了数据之后,输入缓存里就残留了一个‘\n’。
再次使用 scanf("%c", &ch);会读取输入缓存里上次残留的‘\n’,而不是读取新输入的字符。
可以在用 scanf("%c",&ch); 读取字符前用 setbuf(stdin, NULL); 清除输入缓存。

#include <stdio.h>
void main()
{
    char ch;
    do
    {
        printf("请输入一个字符:");
        setbuf(stdin, NULL); //清除输入缓存
        scanf("%c", &ch);
        if (ch >= 'A' && ch <= 'Z')
            printf("大写字母\n");
        else if (ch >= 'a' && ch <= 'z')
            printf("小写字母\n");
        else if (ch >= '0' && ch <= '9')
            printf("数字\n");
        else
            printf("其他\n");
    } while (ch != '#');
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

因为有个回车,你可以在scanf("%c",&ch);后加入getchar();如下:

#include <stdio.h>
void main()
{
char ch;
do{
printf("请输入一个字符:");
scanf("%c",&ch);
getchar();
if(ch>='A'&&ch<='Z')
printf("大写字母");
else if(ch>='a'&&ch<='z')
printf("小写字母");
else if(ch>='0'&&ch<='9')
printf("数字");
else
printf("其他");}while(ch !='#');
}

scanf("%c",&ch);这里输入的时候,需要用getchar()接收一下回车符,否则,下一次读取的就是回车符。

在scanf("%c",&ch);后面添加一句getchar();即可。