【发布时间】:2018-05-06 17:56:58
【问题描述】:
这是强调我遇到的问题的代码的最小形式。 代码在“退出”(案例'0')处失败 - 程序简单地崩溃。我怀疑它与while循环有关。 无论我为退出案例选择什么字符(而不是“0”),都会出现问题。
#include <stdio.h>
void main()
{
int run=1;
char menu_option;
while (run==1)
{
printf("Choose case:\n");
scanf ("%s", &menu_option);
switch (menu_option) {
case '1':
printf("1");
break;
case '2':
printf("2");
break;
case '0':
run=0;
break;
default:
printf("Wrong input, try again\n");
}
}
}
【问题讨论】:
-
scanf ("%s", &menu_option);是类型错误或语义错误,但您确实需要发布minimal reproducible example。 -
我认为我在这里遗漏了一些微不足道的东西。我希望程序在用户输入“0”时完成。因此,如果“0”,我将“运行”设置为 0。由于某种原因,选择这种情况时软件会崩溃(即使我将大小写从“0”更改为任何其他字符)
-
这应该是对我评论的回复吗?
-
由于您不能将字符串用于 switch case,因此
scanf ("%s", &menu_option);似乎应该是scanf (" %c", &menu_option);并注意添加的空格。由于使用%s将至少向内存写入2 个字节,当menu_option可能是char并且因此只有一个字节时,导致结果行为不值得研究。 -
失败怎么办?发生什么了?运行时失败?编译失败?错误信息?
标签: c while-loop switch-statement