是否可以将其添加到此switch语句中?

时间:2019-05-01 11:15:02

标签: c

您好,所以我正在建立一个酒店管理程序,并且试图使我的switch语句简短一些,但它不起作用。我试图添加一个内部带有break的函数,但出现一条错误消息,说break不在循环或switch语句内:

void goback()
{
    char y;
    printf("Would you like to go back?(Y/N)");
    scanf("%c",&y);
    if (y=='Y' || y=='y')
    {
        break;
    }
}
int main(){
    do
    {
        printf (" 1. Add a Room\n 2. Current rooms\n 3. Add a booking\n 4. Current bookings \n 5. Modify a booking\n 6. Print bill\n 7. Exit\n\n");
        printf ("Which section would you like to access:");
        scanf ("%d",&w);
        switch (w){
            case 1:
                clrscr();
                newroom();
                goback();
            case 2:
                clrscr();
                roomscan();
                goback();
            case 3:
                clrscr();
                addbooking();
                goback();
            case 4:
                clrscr();
                currentbooking();
                goback();
            case 5:
                clrscr();
                printf("not ready\n");
            case 6:
                clrscr();
                printf("not ready\n");
            case 7:
                clrscr();
                printf("\t\t\t\tLogging out... See you next time!");
                exit (1);
                break;
            default:
                printf("try again");
        }
    }
    while (w!=7);

}

2 个答案:

答案 0 :(得分:0)

当然,由于break;语句使您无法使用goback()函数,而不是使用case函数,所以会出错。

您知道每个case块都必须以break;结尾。

在您的情况下,必须将break;语句放在每个case块的末尾,并且可以使goback()函数返回一个布尔值来确定是否返回,但是您必须定义如果用户不想返回该怎么办。

答案 1 :(得分:-1)

我不确定,但是如果要分开执行而不是按顺序执行,则可能需要在语句后添加中断。在这里,我只看到您的案例7包含一个中断,这意味着直到执行一个案例为止的所有案例,如果那是您希望的没问题,否则可以尝试这样的事情

switch (w){
case 1:
    clrscr();
    newroom();
    goback();
    break;
case 2:
    clrscr();
    roomscan();
    goback();
    break;
case 3:
    ...

在这里,您的goback()函数似乎试图执行该中断操作,但是它的作用是尝试从被调用的上下文中断,这里是一个“ if”块,它内部无法中断。我猜这就是编译器的意思。