【发布时间】:2018-05-31 15:45:15
【问题描述】:
我正在尝试在 C 中执行此循环,您可以在其中按 Enter 并进入其中,然后按 0 退出或按 3 继续。但不知何故,开关命令没有被激活。请注意,它们每个都有不同的消息,应该将它们与其他结果区分开来。有人可以帮我理解这段代码的问题吗?`注意:代码显然在 int main() 中。
int I = 1;
printf("Press enter to start the loop...");
getchar();
do
{
printf("\nYou are in a LOOP. Would you like to stay in it, or leave it? \nPress 0 to leave the loop or press 3 to stay in it: ");
scanf_s("%d", &I);
getchar();
switch (I)
{
case'3':
printf("\nYou are STILL inside the LOOP. Press 0 to leave it or press 3 to stay in it: ");
getchar();
break;
case'0':
printf("\nExiting the LOOP...");
break;
default:
printf("\nPlease, enter a valid command...: ");
if (scanf_s("%d", &I) != 3 || scanf_s("%d", &I) != 0);
{
fflush(stdin);
}
break;
}
while (I != 0);
printf("\nCongratulations! You are OUT of the LOOP!");
【问题讨论】:
-
case'3':在这里,'3' 是一个字符,而不是一个整数。试试case 3:(没有引号) -
您是否在
while (I != 0);行之前缺少一个结束大括号}?或者这只是一个错字? -
if (scanf_s("%d", &I) != 3 || scanf_s("%d", &I) != 0);很奇怪。首先,删除代表空代码块的尾随;,并且将始终执行以下内容(但是可能不希望出现fflush(stdin))。下一个scanf_s将永远返回3,如手册页所述。这不是您输入的值,而是转换的条目数。所以short-circuit rule 表示该条件中的 secondscanf_s永远不会被执行:这有多感谢? -
不要用“SOLVED”编辑您的帖子,请接受正确答案 - 或者如果不存在解决问题的正确答案,请自己写一个并将其标记为已接受。这样您的问题就可以帮助未来的读者。
标签: c loops while-loop switch-statement case