【问题标题】:Do while loop with switch case in C language not working在 C 语言中使用 switch case 执行 while 循环不起作用
【发布时间】: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 表示该条件中的 second scanf_s 永远不会被执行:这有多感谢?
  • 不要用“SOLVED”编辑您的帖子,请接受正确答案 - 或者如果不存在解决问题的正确答案,请自己写一个并将其标记为已接受。这样您的问题就可以帮助未来的读者。

标签: c loops while-loop switch-statement case


【解决方案1】:

正如其他人指出的那样,您正在使用 scanf_s() 读取整数,但会与 switch 语句中的字符文字进行比较。
switch'3': 应写为 switch 3:(使用整数文字代替)。 0 情况也是如此。

此外,您的示例在 while(I != 0); 之前缺少花括号 }

还值得一提的是,scanf_s()“返回成功转换和分配的字段数”(来自https://msdn.microsoft.com/en-us/library/w40768et.aspx)。也就是说,您在默认 switch 案例中的 scanf_s() 调用只会在读取单个整数(或错误时 EOF)时返回 0 或 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多