我正在尝试运行此简单的计算器代码,但我不知道运行此代码有什么问题。
输入两个操作数(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;
}
答案 0 :(得分:2)
问题在于scanf
将换行符留在缓冲区中。对于您的float
读取来说,这没问题,但是char
读取将失败,因为换行符被视为一个字符,并且在您的开关中不匹配。您可以通过将其更改为以下内容来解决此问题:
scanf(" %c", &operator);
请注意" %c"
中的空格。这样,您就告诉它丢弃前导空格(在本例中为换行符)。
documentation提供了以下解释:
空格字符:格式中的任何单个空格字符 字符串会消耗以下所有可用的连续空格字符 输入(就像通过循环调用isspace来确定)。注意 “ \ n”,“”,“ \ t \ t”或其他空格之间没有区别 格式字符串
。