C程序,切换菜单死循环

标签 c loops switch-statement infinite-loop

好的,它现在可以正确循环,但是当你给它一个输入时,例如'2' 它只是转到默认情况。

 print_Menu() {
        while ( 1 )
    {
        printf("=============================================\n");
        printf("MENU\n");
        printf("=============================================\n");
        printf("1. Do stuff\n2. Do more stuff\n3. Do even more stuff\n4. Quit\n");
        printf("Choose an option: ");

        scanf(" %s*", &selection);


        switch (selection) {
            case 1:
                /*do your thing for option 1*/
                printf("thing 1\n");
                break;
            case 2:
                /*do your thing for option 2*/
                printf("thing 2\n");
                break;
            case 3:
                /*do your thing for option 3*/
                printf("thing 3\n");
                break;
            case 4:
                /*do your thing for option 3*/
                printf("quiting app\n");
                exit(0);
                break;
            default:
                printf(" Invalid selection\n");
               // print_Menu();
                break;
        }
      } 

最佳答案

只需添加

scanf("%*s");

default 情况下,从输入缓冲区中清除无效字符。* 告诉 scanf 扫描字符串并然后丢弃它。

scanf 无法获取整数并在您输入除整数以外的任何其他内容时返回 0。此数据不会被 scanf 使用,因此保留在 stdin 中。第二次调用 scanf 时,它会看到您之前输入的字符然后再次无法读取整数。这将导致无限循环

关于C程序,切换菜单死循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26946408/

相关文章:

c - 在 cs50 pset3 二分搜索中陷入 while 循环

python - python中带有深度参数的嵌套循环

javascript - 动态分层 Javascript 对象循环

java - 输出间隔并将数字分解为小时和分钟

c++ - 当 C/C++ 程序 switch 语句进入未定义的情况并且缺少默认值 :? 时,它的正确行为是什么

javascript - Awesomium C 没有来自 awe_webview_set_callback_js_callback 的响应

c - 如何用 C 语言创建一个程序,编译并运行另一个 C 程序并将输出保存在 txt 文件中?

c - 编译共享库时出错

javascript - 使用 switch 语句更改图标图像

java - if else vs switch java中的性能