使默认语句不退出(C)

Make default statement not exit (C)

我是 C 编程的初学者,我正在尝试做一些基础的事情。我正在尝试使用 switch 语句创建一个简单的菜单,如下所示:

int disp(){
    int check;
    while(check!=1){
        int choose;
        printf("1 \n");
        printf("5quit\n");
        scanf("%d", &choose);

        switch(choose)
        {
            case 1:func1();
            break;

            case 5: check = 1;
            break;

            default:
                printf("wrong input");
        }
        return 0;
    }
}

但是,当 defaultcase 1 发生时,我想让它仍然循环菜单,直到做出正确的输入。例如,如果我输入像 "asdf" 这样的随机内容,程序应该说 "wrong input" 然后再次显示菜单并等待用户输入。如果用户输入“1”,程序将 运行 func1 然后返回菜单并等待用户输入选择。

目前,当输入错误时,只是关闭程序,而不是重新显示菜单,我不知道如何解决。

你的 return 0 语句在你的 while 循环中。将其向下移动一行,在循环之外。

这是正确缩进很重要的原因之一。

此时,输入非数字输入会导致无限循环,因为 scanf 没有读取任何内容。要解决此问题,您可以在调用 scanf 刷新缓冲区后循环调用 getchar

int c;
scanf(" %d", &choose);
while ((c=getchar()) != EOF && c != '\n');

这是正确的并且接近你想要的

// Use a proper formatting standard to improve readability
int disp() {
    int check = 0;    // Initialize the loop variable
    while (check != 1) {
        int choose;
        printf("1 \n");
        printf("5quit\n");
        scanf("%d\n", &choose);    // Ask the scanf to swallow the newline

        switch(choose) {
        case 1:
            func1();
            break;
        case 5:
            check = 1;
            break;
        default:
            printf("wrong input");
        }
    }
    return 0;    // Pull the statement out of the loop
}

编辑:由于您故意提供无效输入,因此最好检查 scanf 的 return 值以避免错误。