C 切换案例0:输入0并输入字母
我有一个代码,当我输入一个字母时,它不会打印错误消息,而是打印C 切换案例0:输入0并输入字母,c,switch-statement,C,Switch Statement,我有一个代码,当我输入一个字母时,它不会打印错误消息,而是打印案例0:。是否有任何方法可以使案例0:仅当且仅当我在scanf语句中输入“0”时才会起作用?如果scanf无法读取值(例如,因为您告诉它读取int并给它一个字母),它将不会更改您的变量。因此,nDisplaySchedule\u选项不会以您可以签入开关的方式更改。如果您不初始化它,至少不会这样做-但是您可以将它设置为开关未包含的值,如果它没有更改,您就知道scanf无法读取值 或者,您可以检查以查看它是否能够读取值: int Disp
案例0:
。是否有任何方法可以使案例0:
仅当且仅当我在scanf
语句中输入“0”时才会起作用?如果scanf
无法读取值(例如,因为您告诉它读取int
并给它一个字母),它将不会更改您的变量。因此,nDisplaySchedule\u选项
不会以您可以签入开关的方式更改。如果您不初始化它,至少不会这样做-但是您可以将它设置为开关
未包含的值,如果它没有更改,您就知道scanf
无法读取值
或者,您可以检查以查看它是否能够读取值:
int DisplaySchedule()
{
int nDisplaySchedule_Choice;
system("cls");
printf("----- DISPLAY SCHEDULE -----\n");
printf("Pick departure station\n\t");
printf("[1] San Pedro\n\t");
printf("[2] Santa Rosa\n\t");
printf("[3] Calamba\n\n\t");
printf("[9] Go Back\n\t");
printf("[0] Exit\n\n");
printf("Choice: ");
scanf("%d", &nDisplaySchedule_Choice);
printf("\n");
switch (nDisplaySchedule_Choice) {
case 1: SanPedro(); break;
case 2: SantaRosa(); break;
case 3: Calamba(); break;
case 9: OpeningScreen(); break;
case 0: printf("Summary()"); break;
default:
printf("ERROR. INPUT A VALID RESPONSE.\n\n");
DisplaySchedule();
break;
}
return;
}
如果scanf
无法读取值(例如,因为您告诉它读取int
并给它一个字母),它将不会更改您的变量。因此,nDisplaySchedule\u选项
不会以您可以签入开关的方式更改。如果您不初始化它,至少不会这样做-但是您可以将它设置为开关
未包含的值,如果它没有更改,您就知道scanf
无法读取值
或者,您可以检查以查看它是否能够读取值:
int DisplaySchedule()
{
int nDisplaySchedule_Choice;
system("cls");
printf("----- DISPLAY SCHEDULE -----\n");
printf("Pick departure station\n\t");
printf("[1] San Pedro\n\t");
printf("[2] Santa Rosa\n\t");
printf("[3] Calamba\n\n\t");
printf("[9] Go Back\n\t");
printf("[0] Exit\n\n");
printf("Choice: ");
scanf("%d", &nDisplaySchedule_Choice);
printf("\n");
switch (nDisplaySchedule_Choice) {
case 1: SanPedro(); break;
case 2: SantaRosa(); break;
case 3: Calamba(); break;
case 9: OpeningScreen(); break;
case 0: printf("Summary()"); break;
default:
printf("ERROR. INPUT A VALID RESPONSE.\n\n");
DisplaySchedule();
break;
}
return;
}
你在这里有
scanf
,在扫描int(%d
)时失败,因为您输入了一个字符-由于匹配失败。因此,根本不需要将任何内容读入nDisplaySchedule\u选项
由于nDisplaySchedule\u选项
一开始未初始化,因此它恰好有0
,因此转到案例0
解决方案是在继续使用nDisplaySchedule\u选项之前检查scanf
返回值scanf
返回成功扫描的项目数。您在这里看到了
scanf
,在扫描int(%d
)时失败,因为您输入了一个字符-由于匹配失败。因此,根本不需要将任何内容读入nDisplaySchedule\u选项
由于nDisplaySchedule\u选项
一开始未初始化,因此它恰好有0
,因此转到案例0
解决方案是在继续使用nDisplaySchedule\u选项之前检查scanf
返回值scanf
返回成功扫描的项目数。始终检查scanf
的返回值。您可以将nDisplaySchedule\u选项设置为“错误”值(例如,-1)在调用scanf
之前-如果给出无效输入,它将保持在此值。您也可以将nDisplaySchedule\u Choice
初始化为无效值(如-1
)。可能重复@anatolyg是的,这是重复的,但那里的答案质量相当低。我希望有一个好的答案来处理scanf
的结果,或者显示一个fgets
备选方案。始终检查scanf
的返回值。您可以将nDisplaySchedule\u选项设置为“错误”值(例如,-1)在调用scanf
之前-如果给出无效输入,它将保持在此值。您也可以将nDisplaySchedule\u Choice
初始化为无效值(如-1
)。可能重复@anatolyg是的,这是重复的,但那里的答案质量相当低。我希望有一个好的答案来处理scanf
的结果,或者显示一个fgets
备选方案。