黑马程序员技术交流社区
标题:
关于C语言(scanf())的一个小小的问题
[打印本页]
作者:
何仕映
时间:
2014-5-1 19:38
标题:
关于C语言(scanf())的一个小小的问题
本帖最后由 何仕映 于 2014-5-1 20:18 编辑
复制代码
#include<stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
printf("%d\n",a);
int b;
scanf("%d",&b);
printf("%d %d\n",a,b);
return 0;
}
复制代码
在以上代码为什么可以在第一次输入时可以
这样,直接输入一个1,空格 然后输入 5。按照这个程序,是在打印第一个数字以后,才定义的整形变量b。应该是先输入一个数字,打印这个数字之后再输入第二个数字啊。为什么在第一次输入时就可以输入两个数字呢?请各位大神指点迷津啊。
作者:
魅影穿眸
时间:
2014-5-1 20:11
scanf("%d",&a);
printf("%d\n",a);输出a
printf("%d %d\n",a,b);输出a b
作者:
m573555543
时间:
2014-5-1 20:12
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\316625387\QQ\WinTemp\RichOle\8_0M325D8UA(OTA`@PHUKBK.jpg可以第二次打印
1.jpg
(8.46 KB, 下载次数: 28)
下载附件
2014-5-1 20:12 上传
作者:
何仕映
时间:
2014-5-1 20:19
m573555543 发表于 2014-5-1 20:12
可以第二次打印
我是想问为什么可以在第一次输入时就可以输入两个数字进行赋值。
作者:
NenKeer
时间:
2014-5-1 20:21
本帖最后由 NenKeer 于 2014-5-1 20:23 编辑
实际上scanf()函数接收输入,并不是直接从键盘接收,而是动过输入流来接收数据,我们从键盘打的字符,都先被存在流中,如果流里面有东西,scanf()就会从里面取东西,而不需要在输入。
#include<stdio.h>
int main(void)
{
int a;
scanf("%d",&a); //输入“1space5enter”,遇到中间的space,第一个scanf函数结束,流内剩下5enter
printf("%d\n",a);
fflush(stdin); //解决这个问题的方法,可以加入调用这个函数,清空输入流的缓冲区,下一个scanf函数就需要键盘重新输入了
int b;
scanf("%d",&b); //如果不调用fflush函数,由于流内还有5enter,所以直接从流内读入,遇到enter,这个scnaf函数结束
printf("%d %d\n",a,b);
return 0;
}
复制代码
作者:
执着的土豆
时间:
2014-5-1 20:29
可能和缓冲区还是和编译器有关系, 应该是先输入,输入的时候会一个一个来,有几个就输入几个,存入缓冲区。读取的时候,读几个再从缓冲区,拿出来几个。这和编译器的处理和编译方式有关吧,这属于编译原理方面的东西。 你可以试试,如果你输入1空格2空格3回车,你会发现,他不会读取后面的3,只会读取1和2。
作者:
machao610
时间:
2014-5-11 23:17
scanf()是在输入缓冲区内取,所以你输入几个数都可以,只是输出时才会根据常量的类型取值。
作者:
UT丶
时间:
2014-5-12 15:33
我明白了0 0
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2