为什么scanf在我第一次输入时总是给我零?

为什么scanf在我第一次输入时总是给我零?,c,scanf,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 expre

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

}
#包括
int main()
{
长整数a,b,c;
char op;
c=0;
printf(“输入表达式:”);
scanf(“%ld%s%ld”,&a,&op,&b);
开关(op){
格(“+”):c=a+b;中断;
案例('-'):c=a-b;中断;
格('*'):c=a*b;中断;
案例(“/”):c=a/b;中断;
默认:中断;
}
printf(“\n%ld”,c);
返回0;
}

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

因此,务必检查
scanf
是否成功,以及项目数量是否正确分配

了解转换说明符(字符
%
后的内容)和长度修饰符及其在C中的含义是很好的


查看C委员会草案(N1570)部分,您将了解如何使用
scanf
我不确定您是否将
5+6
5+6
作为输入。如果正在执行第一个操作,请尝试执行第二个操作,即,
number1+number2
,字符之间不留空格。 并删除
scanf(“%ld%s%ld”)
中的空格


希望这有帮助。

%c
代表字符,而不是
%s
scanf
还有一个返回值,您应该检查它是否读取了您期望的项目数。您应该为操作员使用
%c
,而不是
%s
。谢谢。修复了它,但我仍然得到相同的输出。我在网上查阅的每一篇scanf教程都告诉我,这是正确的设置方法,只是让它开始工作。出于某种原因,当我删除%ld%c和%ld之间的空格并相应地调整输入(5+6)时,它会起作用。请提供一个*input*/a会话的示例,作为从控制台复制粘贴的方式,在控制台中键入输入并显示相应的输出,删除输入和scanf声明中的空格确实起到了作用。但为什么呢?我认为这个链接可能对虚无主义有所帮助。