A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何仕映 中级黑马   /  2014-5-1 19:38  /  2204 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何仕映 于 2014-5-1 20:18 编辑

复制代码
  1. #include<stdio.h>

  2. int main(void)
  3. {

  4.         int a;

  5.         scanf("%d",&a);
  6.         printf("%d\n",a);

  7.         int b;
  8.         scanf("%d",&b);


  9.         printf("%d   %d\n",a,b);

  10.         return 0;
  11. }
复制代码







在以上代码为什么可以在第一次输入时可以这样,直接输入一个1,空格 然后输入 5。按照这个程序,是在打印第一个数字以后,才定义的整形变量b。应该是先输入一个数字,打印这个数字之后再输入第二个数字啊。为什么在第一次输入时就可以输入两个数字呢?请各位大神指点迷津啊。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

7 个回复

正序浏览
UT丶 中级黑马 2014-5-12 15:33:59
8#
我明白了0 0
回复 使用道具 举报
scanf()是在输入缓冲区内取,所以你输入几个数都可以,只是输出时才会根据常量的类型取值。
回复 使用道具 举报
可能和缓冲区还是和编译器有关系, 应该是先输入,输入的时候会一个一个来,有几个就输入几个,存入缓冲区。读取的时候,读几个再从缓冲区,拿出来几个。这和编译器的处理和编译方式有关吧,这属于编译原理方面的东西。   你可以试试,如果你输入1空格2空格3回车,你会发现,他不会读取后面的3,只会读取1和2。
回复 使用道具 举报
本帖最后由 NenKeer 于 2014-5-1 20:23 编辑

实际上scanf()函数接收输入,并不是直接从键盘接收,而是动过输入流来接收数据,我们从键盘打的字符,都先被存在流中,如果流里面有东西,scanf()就会从里面取东西,而不需要在输入。
  1.     #include<stdio.h>

  2.     int main(void)
  3.     {

  4.             int a;

  5.             scanf("%d",&a);                   //输入“1space5enter”,遇到中间的space,第一个scanf函数结束,流内剩下5enter
  6.             printf("%d\n",a);

  7.             fflush(stdin);                   //解决这个问题的方法,可以加入调用这个函数,清空输入流的缓冲区,下一个scanf函数就需要键盘重新输入了

  8.                         int b;
  9.             scanf("%d",&b);                  //如果不调用fflush函数,由于流内还有5enter,所以直接从流内读入,遇到enter,这个scnaf函数结束


  10.             printf("%d   %d\n",a,b);

  11.             return 0;
  12.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报

我是想问为什么可以在第一次输入时就可以输入两个数字进行赋值。
回复 使用道具 举报
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\316625387\QQ\WinTemp\RichOle\8_0M325D8UA(OTA`@PHUKBK.jpg可以第二次打印



评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
scanf("%d",&a);
printf("%d\n",a);输出a

printf("%d   %d\n",a,b);输出a b
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马