求高手帮忙看看我的这段C语言程序错在哪?

2024-12-25 10:47:03
推荐回答(3个)
回答1:

#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);
}
}
}

回答2:

getchar()的问题
当程序调用getchar()时,程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符
注意:回车字符也放在缓冲区中的
所以你上面的问题就是getchar()吃了回车,把它也当作一次字符输入走了while循环
也就是说你一次性输入多少个字符,它就会有多少次输出
如你输入:ERERERERER 再按回车
那会就会输出11次(+回车键)
“input'E',输入数据
input'R',读取数据
input'Q',退出程序”
解决办法一:
使用getch()函数,需要头文件,但这个函数不等待用户按回车,只要用户按一个键,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');

当然,根据自己的功能进行需求吧

回答3:

先用while再用do试