c-当我更改输入顺序时,为什么我的程序不工作



我开始学习C,并尝试使用switch语句编写这个数学程序。当我先扫描操作员,然后扫描数字时,程序运行和工作都很好。但是,如果我将scanf函数的顺序切换为先取数字,然后取运算符,程序会取数字,但之后不会取第二个输入(运算符(,只打印默认值(无效输入(。为什么会发生这种情况?

我已经提供了代码(如果我运行这个代码,程序只取数字而不取运算符就会出现问题。但顺序颠倒了,它就起作用了(。

#include <stdio.h>
int main()
{
float a, b, result;
char operator;
printf("Enter 2 numbers:");
scanf("%f %f", &a, &b);
printf("Choose a math operator (+, -, *, /):");
scanf("%c", &operator);
switch (operator)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
default:
printf("nInvalid operator");
return -1;
}
printf("%f", result);
return 0;
}

格式字符串"%c"将从输入的第一行读取换行符。您想要的是" %c",它将跳过前导空格,因此替换行

scanf("%c", &operator);

带有

scanf(" %c", &operator);

另请参阅https://pubs.opengroup.org/onlinepubs/9699919799/

由一个或多个空白字符组成的指令通过读取输入执行,直到无法读取更多有效的输入,或向上到不是空白字符的第一个字节,该字节保留未读。

您需要更改

scanf("%c", &operator);

scanf("%s", &operator);

它将运行。

相关内容

  • 没有找到相关文章