为什么scanf总是给我第一次输入零? [关闭]

问题描述 投票:-1回答:2

我是一名Java程序员,试图为一个班级和一个人学习C语言,我无法解决这个问题。没有理由说这不应该起作用,但事实并非如此。我正在尝试编写一个简单的计算器应用程序,无论我如何编写它,我输入的第一个数字(变量a)最终为0,但第二个数字很好。输入为5 + 6时,输出为6.我缺少什么?

#include <stdio.h>

int main()
{
    long int a, b, c;

    char op;

    c = 0;

    printf("Enter the expression: ");
    scanf("%ld %s %ld", &a, &op, &b);

    switch(op){
        case('+'): c = a+b; break;
        case('-'): c = a-b; break;
        case('*'): c = a*b; break;
        case('/'): c = a/b; break;

        default: break;
    }

    printf("\n%ld", c);

    return 0;

}
c scanf
2个回答
0
投票

我不确定你是否给5<space>+<space>65+6(没有空格)作为输入。如果你正在做第一个,那么尝试做第二个,即number1+number2,字符之间没有空格。并删除scanf("%ld %s %ld")中的空格。

希望这可以帮助。


1
投票

如果在第一次转换(如果有)完成之前发生输入故障,则scanf函数返回宏EOF的值。否则,该函数返回分配的输入项的数量,如果早期匹配失败,则可以少于提供的数量,甚至为零。

因此,请始终检查scanf是否成功以及是否正确分配了项目数。

最好知道转换说明符(在%字符之后的内容)和长度修饰符及其在C中的含义。

查看C委员会草案(N1570)章节7.21.6.2 The fscanf function7.21.6.4 The scanf function,您将了解如何使用scanf

© www.soinside.com 2019 - 2024. All rights reserved.