为什么scanf在我第一次输入时总是给我零?
我是一名Java程序员,试图为一个阶级和一个人学习C语言,对此我不能掉以轻心。没有理由不这样做,但事实并非如此。我正在尝试编写一个简单的计算器应用程序,无论我如何编写它,我输入的第一个数字(变量a)最终都是0,但第二个是可以的。以5+6作为输入,输出为6。我错过了什么为什么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
#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声明中的空格确实起到了作用。但为什么呢?我认为这个链接可能对虚无主义有所帮助。