这个问题在这里已有答案:
我正在尝试运行这个简单的计算器代码,我不知道运行此代码有什么问题。
在我输入两个操作数(Num1和Num2)后,程序自动跳转到开关默认消息,我试图通过互联网检查相同的代码,它们看起来完全一样......
有人可以指出我做错了什么吗? (在2017年的visual studio上运行)谢谢!
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;
}
问题是scanf
将换行符留在缓冲区中。这对于你的float
读取没有问题,但char
读取将失败,因为换行符被视为char并且在你的开关中不匹配。您可以通过将读取更改为此来修复它:
scanf(" %c", &operator);
注意" %c"
的空间。有了这个你告诉它丢弃前导空格(在这种情况下是换行符)。
documentation提供以下解释:
空白字符:格式字符串中的任何单个空格字符都会占用输入中所有可用的连续空白字符(通过在循环中调用isspace来确定)。请注意,格式字符串中的“\ n”,“”,“\ t \ t”或其他空格之间没有区别
.