C语言中的计算器-switch语句不起作用

时间:2019-02-18 08:37:18

标签: c calculator

我正在尝试运行此简单的计算器代码,但我不知道运行此代码有什么问题。

输入两个操作数(Num1和Num2)后,程序会自动跳转到开关默认消息, 我试图通过互联网检查相同的代码,它们看起来完全一样...

有人可以指出我做错了什么吗? (在Visual Studio 2017上运行) 谢谢!

  int main() {
double Num1, Num2;
char operator;

printf("Enter first number:\n");
scanf("%lf", &Num1);

printf("Enter second number:\n");
scanf("%lf", &Num2);

printf("Enter operator: + or - ");
scanf("%c", &operator);

switch(operator)
{

case '+':
    printf("%.1lf + %.1lf = %.1lf", Num1, Num2, Num1 + Num2);
    break;

case '-':
    printf("%.1lf - %.1lf = %.1lf", Num1, Num2, Num1 - Num2);
    break;

default:
    printf("Operator is not correct");


}

return 0;

}

1 个答案:

答案 0 :(得分:2)

问题在于scanf将换行符留在缓冲区中。对于您的float读取来说,这没问题,但是char读取将失败,因为换行符被视为一个字符,并且在您的开关中不匹配。您可以通过将其更改为以下内容来解决此问题:

scanf(" %c", &operator);

请注意" %c"中的空格。这样,您就告诉它丢弃前导空格(在本例中为换行符)。

documentation提供了以下解释:

  

空格字符:格式中的任何单个空格字符   字符串会消耗以下所有可用的连续空格字符   输入(就像通过循环调用isspace来确定)。注意   “ \ n”,“”,“ \ t \ t”或其他空格之间没有区别   格式字符串