为什么scanf总是在我的第一个输入中给我零?

时间:2018-09-07 03:51:10

标签: c scanf

我是一名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;

}

2 个答案:

答案 0 :(得分:1)

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

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

很高兴知道转换说明符(在%字符之后是什么)以及长度修饰符及其在C语言中的含义。

查看C委员会草案(N1570)7.21.6.2 The fscanf function7.21.6.4 The scanf function部分,您将对如何使用scanf有个好主意。

答案 1 :(得分:0)

我不确定您是在输入5<space>+<space>6还是5+6(无空格)作为输入。如果您要进行第一个操作,请尝试进行第二个操作,即number1+number2,字符之间不要有空格。 并删除scanf("%ld %s %ld")中的空格。

希望这会有所帮助。