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;
}
我有这段代码,当我输入一个字母时,它不会打印错误消息,而是打印 case 0:
。有什么方法可以使 case 0:
仅当且仅当我在 scanf
语句中输入“0”时才起作用?
你有undefined behaviour在这里。
scanf
,在扫描 int (%d
) 时失败,因为您输入了一个字符 - 由于 匹配失败。因此根本不会将任何内容读入 nDisplaySchedule_Choice
。
由于 nDisplaySchedule_Choice
一开始是未初始化的,它恰好有 0
,因此转到 case 0
。
解决方案是在继续使用 nDisplaySchedule_Choice
之前检查 scanf
返回值。 scanf
返回成功扫描的项目数。
我是一名优秀的程序员,十分优秀!