关于scanf的用法

例如以下代码
#include<stdio.h>
#include<math.h>
int main()
{
int a,b;
b=scanf("%d",&a);
printf("the result is %d",b);
}
请问假如是以上例子,什么情况下输入打印出的数据为0?
很多大程序用到这样的scanf赋值,意义是什么?

我来说一下吧。
scanf("%d",&a);
b=a;
这样是没有问题的。

b=scanf("%d",&a);

看看下面:
int scanf( const char *format, ... ); 【定义格式】
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
  如:
  scanf("%d,%d", &a, &b);
  如果a和b都被成功读入,那么scanf的返回值就是2
  如果只有a被成功读入,返回值为1
  如果a和b都未被成功读入,返回值为0
  如果遇到错误或遇到end of file,返回值为EOF。追问

还有一个小疑问,程序如下
#include
int main()
{
int a,b,c;
b=scanf("%d%d",&a,&c);
printf("the result is %d",b);
printf("%d",a);
}
我输入两个数
针对一条打印,如果第一个数为int,第二个数为小数,则结果为2
如果第一个数为小数,第二个数任意,则结果为1
第二条打印,我对a输入小数,那么a会被舍去小数。
针对以上,为什么?

追答

a是int类型的。%d的格式不接受小数点。所以……

追问

我知道,关键我care的是第一条打印语句,第一个数字我输入小数以后,第二个数字我就算是输入的int型,结果依然是1,而不是2,为什么?

追答

很好解释啊。你想想

2.2 5
the result is 1 【b=1,a正常的接受了2,而后面的.2 5,却没有正常的给C 所以只成功了一个】
a=2,c=2009118740 【c没有赋初值。随机的】

int a,b,c=9;
b=scanf("%d%d",&a,&c);
printf("the result is %d",b);
printf("\na=%d,c=%d\n",a,c);
c如果赋初值你就可以发现,c没有获取输入,还是9.

到此结束!

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-01
scanf与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
如int scanf(const char *format,...);
第2个回答  推荐于2019-08-09

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;

如果只有a被成功读入,返回值为1;

如果a和b都未被成功读入,返回值为0;

如果遇到错误或遇到end of file,返回值为EOF。

本回答被网友采纳
第3个回答  2019-10-30
因为你这里用的是scanf所以输出缓寸里的数据不会马上输出,而是等你回车,结束输入之后一起输出,所以第一次输出本来该输出3,可是因为你没回车,被延迟了,但你回车之后会把输出缓存里的3和7一起输出!
第4个回答  2018-05-22

具体如下:

1、记住一点,scanf认为遇到“非法输入”就结束。

2、scanf("%2d%f",&a,&b);中第一个格式控制字符2d的意思是读取2位,作为一个整数输入到给对应的变量a的地址中。输入876,当然只读取前2位87。这是2的作用,后面输入对于2来说,相当于非法输入。

3、对于%f,后面输入的是7 543.0,对于浮点型数据是不可能得到空格的,所以遇到空格,认为是非法输入,结束输入。所以b的值是6,即是6.000000。

4、scanf函数是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。

本回答被网友采纳
相似回答