?- 为什么 if() 语句中的 scanf() 工作不正确?

wyb*_*bot 0 c

我正在尝试在命令行应用程序中制作计算器,但是当我使用`

int a, b, result;
printf("Enter problem:\n");

if(scanf("%i+%i", &a, &b))
{
    result = a + b;
    printf("%i\n", result);
}
else if(scanf("%i*%i", &a, &b))
{
    result = a * b;
    printf("%i\n", result);
}
Run Code Online (Sandbox Code Playgroud)

如果我写5+5,我就会有10,但是当我写的时候,5*5它就会表现出来32771。如果我交换这些语句,当我写 时5*5,我有 25 个,但是当我写 时5+5,我32771也有。预先感谢您的回答!

P__*_*J__ 5

if(scanf("%i+%i", &a, &b))  
Run Code Online (Sandbox Code Playgroud)

该行没有任何意义,因为返回的是成功scanf扫描的项目数。

如果你想检查是否scanf成功

if(scanf("%i+%i", &a, &b) == 2) 
Run Code Online (Sandbox Code Playgroud)

其余部分无效,因为scanf从输入流读取数据,第二个scanf将没有要扫描的整行。

char line[100];
fgets(line, 100, stdin);  // check for errors
if(sscanf(line, "%i+%i", &a, &b) == 2)
{
    result = a + b;
    printf("%i\n", result);
}
else if(sscanf(line, "%i*%i", &a, &b) == 2)
{
    result = a * b;
    printf("%i\n", result);
}
else
{
    printf("Invalid Input\n");
}
Run Code Online (Sandbox Code Playgroud)