【发布时间】:2014-10-24 15:23:25
【问题描述】:
更新代码
为什么输入 12 有效?它将 12 解释为选项 1 并为 case'1' 的第一个 scanf 取 2?我不想像输入一个字母一样使用 int opcao,它会无限期地运行。
我希望用户只能在选择退出选项(其中一种情况)时退出程序,因此执行... while。如果用户输入无效字符或字母或菜单再次显示的任何内容并显示默认消息。我还希望在执行所选案例后,它会再次显示菜单以供新选择,因此我同时使用 1=1 的始终有效条件。我不能使用整数,就好像你输入一个字母程序会变得疯狂,又名永远不会停止运行。试试看吧。
char opcao;
do {
menu();
scanf(" %c",&opcao);
switch(opcao) {
case '1':
printf("Massa do módulo (sem combustível):\n");
scanf("%f",&m_modulo);
printf("Massa de combustível:\n");
scanf("%f",&m_combustivel);
printf("Altitude no início da alunagem em relação a um ponto de referência:\n");
break;
case '2':
break;
case '3':
printf("Funcionalidade nao disponivel.\n");
break;
case '4':
printf("Funcionalidade nao disponivel.\n");
break;
case '5':
printf("Funcionalidade nao disponivel.\n");
break;
case '6':
exit(0);
break;
default:
printf("Opcao invalida, as seguintes opcoes estao disponiveis:\n");
break;
}
}
while(1==1);
【问题讨论】:
-
使用
opcao = getch()而不是scanf(" %c",&opcao)。 -
while(opcao!=1 || opcao!=2 || opcao!=3 || opcao!=4 || opcao!=5 || opcao!=6 && opcao>=1 && opcao<=6);条件始终为真。 -
无论如何,你必须决定是使用
int opcao还是char opcao。 -
在演示问题时,请始终确保您的示例遵循 "Minimal, Complete, Verifiable Example" 中的“最小”。这意味着 最短代码 来演示混淆。显然,不需要案例 2 到 6(并且没有代码),因此可以删除这些案例。但是,在案例 1 中,您还需要更多的 scanf 调用来证明该问题。请记住,您还可以使用“编辑”按钮编辑您的帖子,使其更加简洁和信息丰富。
-
在
while中你真的是指while((opcao != '1')||(opcao != '1') ...吗?您在开关中测试的值是 ASCII '1',即 = 0x31 或 49(十进制)。
标签: c switch-statement