【问题标题】:Why does my switch statement print a case and default?为什么我的 switch 语句打印大小写和默认值?
【发布时间】:2016-11-13 05:19:25
【问题描述】:
#include <stdio.h>

int main(void)
{
    char ch;
    int end=0;
    printf("\nPick a letter a through f. (f ends the program)");
    do
    {
        scanf("%c", &ch);

        switch (ch) {
    case 'a':
        printf("a. another: ");
        break;
    case 'b':
        printf("b. another: ");
        break;
    case 'c':
        printf("c: another ");
        break;
    case 'd':
        printf("d. another: ");
        break;
    case 'e':
        printf("e. another:  ");
        break;
    case 'f':
        printf("f. Goodbye. ");
        end=1;
        break;
    default:
        printf("That wasn't a through f. ");
        break;
        }
    } while (end == 0);
    return 0;
}

所以如果你输入 a 那么它会说:

a. another: That wasn't a through f.

如果你输入 say g 那么它会说:

That wasn't a through f. That wasn't a through f. 

如果你输入 f 那么它会按预期进行

f. Goodbye.

程序终止。

关于如何解决此问题的任何提示?我已经尝试查找了一段时间,但我得到的答案不是 C 语言,或者他们说你忘记了休息;陈述。我也是 C 的新手,所以也许这很明显我没有注意到,我还认为这可能是由于 do while 循环的原因?感谢您的宝贵时间

【问题讨论】:

  • 问题在于scanf("%c", &amp;ch); 通过在其中添加空格来修复:scanf(" %c", &amp;ch);
  • scanf 在格式说明符中没有空格,不会将空格与任何其他字符区别对待。它为a 执行循环一次,然后为换行再次执行循环
  • 感谢您对scanf的解释。我不知道它是这样工作的。案例'\ n':中断;和 scanf("%c", &ch);两者工作相同

标签: c switch-statement do-while


【解决方案1】:

scanf("%c", &amp;ch) 一次读取一个字符。如果您正在输入一个字母,然后按 Enter,那么您将提供两个字符:字母和换行符(U+000A,'\n')。

如果您想忽略换行符,一种选择是显式检查它们:

case '\n':
    break;

【讨论】:

    【解决方案2】:

    你也可以试试这个方法..

    scanf("%c\n", &amp;ch);

    它会自动吃掉多余的\n个字符

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多