输入字符,直到输入#结束但程序每次都多输出一次
#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 != '#');
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
因为有个回车,你可以在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();即可。