我希望这个程序从 switch 中断并回到 while 循环。为什么它不起作用?
我在 while 循环中放置了一个 switch 语句。我认为中断会干扰 while 循环,使其提前中断。我该如何解决这个问题?
#include <stdbool.h>
#include <stdio.h>
int main(void)
{
bool ON_status = true;
char option = '0';
while (ON_status == true)
{
printf("enter option 1, 2, 3, or 4.\n");
printf("Select an option from the menu above then press the enter key: ");
scanf("%1s", &option);
switch (option)
{
case '1':
printf("option1 was selcted");
break;
case '2':
printf("option2 was selcted");
break;
case '3':
printf("option3 was selcted");
break;
case '4':
printf("option4 was selcted");
ON_status = false;
break;
default:
break;
}
}
return 0;
}
最佳答案
您的代码的问题在于该行
scanf("%1s", &option);
溢出 option
中的内存.C 中的字符串以空字符结尾。所以 '%1s' 存储一个字符和一个空终止符。但是你的
option
变量只有一个字符长,那么零(或 NULL、NUL、null 取决于您的命名)在哪里?在这种情况下,因为
ON_status
和选项在内存中被声明在附近,它正在覆盖 ON_status
.要查看发生了什么,您可以打印
ON_status
的值。外switch
你会观察到它是 0。为了解决这个问题,我想我会替换你的
scanf
和option = getc(stdin);
关于c - 为什么这个 switch 语句在运行时结束 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64832048/