#include
#include
#include
void main()
{
char ch;
for(;;)
{
do{
printf("input'E',输入数据\n");
printf("input'R',读取数据\n");
printf("input'Q',退出程序\n");
flushall(); //新加的!新加的!新加的!
ch=toupper(getchar());
}while(ch!='E'&&ch!='Q'&&ch!='R');
switch(ch)
{
case 'E':break;
case 'R':break;
case 'Q': exit(0);
}
}
}
getchar()的问题
当程序调用getchar()时,程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符
注意:回车字符也放在缓冲区中的
所以你上面的问题就是getchar()吃了回车,把它也当作一次字符输入走了while循环
也就是说你一次性输入多少个字符,它就会有多少次输出
如你输入:ERERERERER 再按回车
那会就会输出11次(+回车键)
“input'E',输入数据
input'R',读取数据
input'Q',退出程序”
解决办法一:
使用getch()函数,需要头文件
do{
printf("input'E',输入数据\n");
printf("input'R',读取数据\n");
printf("input'Q',退出程序\n");
ch=toupper(getch());
printf("%c\n", ch );
}while(ch!='E'&&ch!='Q'&&ch!='R');
解决办法二:
调用flushall()函数,一次只从缓冲区读取一个字符后清空缓冲区
do{
flushall(); // 在这里调用
printf("input'E',输入数据\n");
printf("input'R',读取数据\n");
printf("input'Q',退出程序\n");
ch=toupper(getchar());
}while(ch!='E'&&ch!='Q'&&ch!='R');
当然,根据自己的功能进行需求吧
先用while再用do试