要求用户输入swich语句,这将在c中生成另一个swich

时间:2017-03-12 16:23:21

标签: c newline getchar

如何在switch语句中询问用户输入,这将在c中生成另一个开关,我试过这个,但我的程序崩溃了。

#include <stdio.h>
#include <stdlib.h>

int main()
{

    char choise1, choise2;

    printf("Starting menu:\n a -> Start\n");
    choise1 = getchar();

    switch(choise1){

    case 'a':
        printf("\n a -> New Game\n b -> Load Game");
        choise2 = getchar();
        switch(choise2){
        case 'a':
            printf("Start new game.");
            break;
        case 'b':
            printf("Loading game.");
            break;
        default:
            printf("This is a wrong input.");
        }
        break;

    default:
        printf("This is a wrong input.");

    }

    return 0;
}

1 个答案:

答案 0 :(得分:3)

我看到这里的问题是由于输入缓冲区的剩余输入。

当您输入 a 并按 ENTER 时,newline将存储在输入缓冲区中的a之后,将返回下次拨打getchar()

如果要连续调用getchar()来返回有效输入,则需要清除现有内容的输入缓冲区,然后才能读入下一个输入。检查this answer是否有一些解释清楚的方法。

那就是说,

  • getchar()会返回int,对于某些返回值,例如EOF,它可能不适合char。将choise1choise2类型更改为int
  • int main()至少应为int main(void),以使托管环境符合标准。