【问题标题】:Basic C - Switch cases duplication基本 C - 切换案例重复
【发布时间】:2024-04-28 06:00:02
【问题描述】:

我正在做一个项目,你回答一个字符,如果它不是 4 个答案之一,它会告诉你再试一次。如果它不是 4 个中的正确之一,它将停止运行。这是一个片段。

#include <stdio.h>
#include <stdbool.h>
bool switchCheck = true;
char answer;

        printf("A. English\nB. French\nC. Spanish\nD. German\n");
      do{
        scanf("%c\n", &answer);
        switch (answer){
          case 'C':
            printf("Very nice ");
            break;
          case 'B':
          case 'A':
          case 'D':
            printf("Sorry! Incorrect. Code Ends\n");
            switchCheck =false;
            break;
          default:
            printf("Try Again\n");
        }
      }while(switchCheck==true);
     

由于某种原因,当我输入 A、B 或 D 时,它首先打印默认结果,如果我之后立即再次打印,它会给我正确的输入。有什么帮助吗?

谢谢!

【问题讨论】:

  • 我们可以看看围绕它的其他代码吗? (一个“最小的可重现示例”。)
  • 这几乎可以肯定是由于您阅读输入的方式。你没有显示。请提供完整的minimal reproducible example
  • case '\n': continue;

标签: c char switch-statement scanf whitespace


【解决方案1】:

你正在使用 scanf 之类的

scanf("%c\n", &answer);

改为使用

scanf( " %c", &answer );

请参阅转换说明符 %c 之前的空白。它允许跳过空格。

【讨论】:

  • 成功了!谢谢!