[英]Why does getchar() not pause after a switch case and inside a while loop?
#include <stdio.h>
#include <stdlib.h>
main()
{
int Q = 1;
while(Q==1)
{
system("clear");
printf("MAIN MENU\n");
printf("--------------------------------------\n");
printf("1 - See all files\n");
printf("2 - See all files with permission\n");
printf("3 - VIM Editor\n");
printf("4 - EXIT\n");
fputs("Enter Choice : ",stdout);
char ch = getchar();
switch(ch)
{
case '1' : system("ls"); break;
case '2' : system("ls -l"); break;
case '3' : system("vi"); break;
case '4' : Q=0; break;
default : puts("Wrong Choice.."); break;
}
fflush(stdin);
fputs("PRESS ENTER TO CONTINUE...",stdout);
getchar();
}
}
getchar()不会暂停,而只是清除屏幕并再次启动菜单。
这些问题的原因是什么? 我正在使用tutorialspointcodingground在线编译器。
如果您显示意外字符是什么,则可以自己确定问题所在:
default: printf ("Unrecognized choice: '%c' (%d)", ch, ch); break;
在任何类似情况下使用该技术都不错。 如果代码以某种方式获得了意外输入,请说出并显示已知信息。
发生这种情况是因为fflush()并不总是刷新标准输入,也不是清除缓冲区的最安全方法。 尝试改用scanf(“%c”,&yourcharvariable),否则您应该使用另一个getchar()来消耗第一个输入所留下的'\\ n'。
请尝试以下代码:
#include <stdio.h>
#include <stdlib.h>
main()
{
int Q = 1;
while(Q==1)
{
system("clear");
printf("MAIN MENU\n");
printf("--------------------------------------\n");
printf("1 - See all files\n");
printf("2 - See all files with permission\n");
printf("3 - VIM Editor\n");
printf("4 - EXIT\n");
fputs("Enter Choice : ",stdout);
char ch = getchar();
switch(ch)
{
case '1' : system("ls"); break;
case '2' : system("ls -l"); break;
case '3' : system("vi"); break;
case '4' : Q=0; break;
default : puts("Wrong Choice.."); break;
}
fflush(stdin); // This doesn't always work.
getchar(); // It consumes the '\n' left by your first getchar().
fputs("PRESS ENTER TO CONTINUE...",stdout);
getchar();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.