繁体   English   中英

为什么在切换大小写之后和while循环内,getchar()不会暂停?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM