您好,所以我正在建立一个酒店管理程序,并且试图使我的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);
}
答案 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”块,它内部无法中断。我猜这就是编译器的意思。