gpt4 book ai didi

c - 开关盒 0 : entering 0 and entering a letter

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:00 28 4
gpt4 key购买 nike

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 返回成功扫描的项目数。

关于c - 开关盒 0 : entering 0 and entering a letter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com