使默认语句不退出(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;
}
}
但是,当 default
或 case 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 值以避免错误。
我是 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;
}
}
但是,当 default
或 case 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 值以避免错误。