【问题标题】:Switch Statement Not Executing Cases (c)Switch 语句不执行用例 (c)
【发布时间】:2014-03-25 02:33:02
【问题描述】:

我做了一个 switch 语句,但是,它只适用于已经设置的常量。如果我尝试将它与用户输入一起使用,则只有一种情况有效,其他情况均无效。现在无论我输入什么,它总是使用默认大小写。我尝试添加另一个 getchar() 以从缓冲区中清除 \n 字符,但这并没有什么不同。我将在这里发布整个 switch 语句:

      char option=' ';
      option=getchar();
      switch(option){

        //Parallel resistance calculations
        case 'p':
            CLEAR
            //PResistance();
            printf("RESISTANCE");
            getchar();
            break;

        //Ohm's Law calculations
        case 'o':
            CLEAR
            printf("OHM");
            //Ohm();
            break;

        //Exits program
        case 'q':
            printf("Good bye! Stay safe in the laboratory! :)\nPress any key to exit");
            getchar();
            exit(0);
            break;

        //Error checking
        default :
            printf("Invalid input, Try again"); 
            break;

    }


}
while (option!='q');

我注释掉了这些函数,所以我可以使用打印语句来测试它是否工作。

【问题讨论】:

  • 仅当 option 是 char 变量时,该开关才会匹配。如果是int就会有问题。您可以将选项更改为 char,也可以使用 switch(option & 0xFF){
  • option 是一个 char 变量。
  • 如果optionint,它仍然会匹配。 getchar() 无论如何都会返回int,而'p''q' 等都是整数。
  • @OP:将默认值更改为 printf("Invalid input %d, try again", option);。然后您将能够确切地看到发生了什么。

标签: c char switch-statement getchar


【解决方案1】:

每当您在 C 中从 stdin 输入 characterstring 时,请始终确保输入缓冲区中没有 \n。为此,请始终在接受 integerfloat 输入后使用 getchar()

在您的情况下,您可能在输入character 之前输入了integer。因此,在输入character 之前尝试编写getchar()

【讨论】:

  • 谢谢。在每次输入后添加 getchar() 可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多