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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ⒈心只霸占沵 高级黑马   /  2014-5-17 21:19  /  2393 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ⒈心只霸占沵 于 2014-5-19 11:04 编辑

老师讲的scanf  
int num1,num2;
scanf("%d %d",&num1,&num2);
空格  tab  回车  
我想知道内部的原理

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

8 个回复

倒序浏览
  比较  高深  想了下 没想出来。。  等大神
回复 使用道具 举报
本帖最后由 ios风痕 于 2014-5-17 23:16 编辑

scanf("%d %d",&num1,&num2);
其原理就是从键盘输入值,并把这个值的内存地址按输入顺序赋给&num1和&num2中,然后在调用的的时候就能找到。

评分

参与人数 1黑马币 +3 收起 理由
傘が咲く + 3 顶版主!

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 戒惜舍得 于 2014-5-21 06:13 编辑

  scanf读到空格时结束!  
   所以    如果你用空格 分开的话
       Tab 键其实就是  多个空格 一起输入
      当你按 回车 Tab时  scanf  知道了第一个 输入完毕,接着接受第二个。
    楼主 明白了吗
   祝楼主早日进黑马

点评

受教!!谢谢  发表于 2014-5-17 23:18

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

回复 使用道具 举报
&a,&b,&c中的&是地址运算符,&a指a在内存中的地址。scanf的作用是:按照a,b,c的内存地址将a,b,c的值存进去。变量a,b,c的地址是在编译连续阶段分配的。 这里注意:如果scanf中%d是连着写的如“%d%d%d”,在输入数据是,数据之间不可以加逗号,只能是空格或tab键或者回车键——“2 3 4”/“2(按tab)3(按tab)4(按tab)”。若是“%d,%d,%d”,则在输入数据时需要加“,”——“2,3,4”.
回复 使用道具 举报
键盘缓冲区用来缓存“按键”的ASCII码,而scanf()每次从键盘缓冲区中读取一个字符(ASCII码),直到 键盘缓冲区为空。如果键盘缓冲区为非空状态,执行scanf()不会要求输入,如果键盘缓冲区为空,执行 scanf()则会等待用户的输入。
回复 使用道具 举报
二狗 中级黑马 2014-5-18 20:27:02
7#
scanf("%d %d",&num1,&num2);
当你写这个代码的时候你就把空格定义为这个scanf函数中的分隔符了
所以当scanf遇到你输入的数值的时候就把第一次空格之前的内容保存在&num1这个地址
空格之后的保存到&num2地址。
实际上scanf("%d%d",&num1,&num2);  %d%d之间没用空格你也可以用回车 空格隔断俩个数值分别输入进去。
回复 使用道具 举报
好的,我说一些自己对这个函数的理解,希望能够帮助到你
首先,一般scanf()函数输入的格式和“”中的格式相同,例如你的例子是scanf("%d %d",&num1,&num2);那么你输入的应该是(这里用x1,x2表示你输入的数)x1x2,按回车表示确定,
这个函数的原理是:当运行到这个函数,你输入的数据会被存入缓冲区,当按回车的时候该函数从数据缓冲区读入数据。其中&表示你的变量num1和num2的地址,
补充说明一些:如果你的例子下面还有一个scanf()函数,如下
int num1,num2;
char c ;
scanf("%d %d",&num1,&num2);
scanf("%c",&c);
那么,当你输入数字按下回车后,第一个scanf()函数读入数字,但是数据缓冲区存入了你输入的回车,下面的输入字符的那个函数会自动输入回车符。这点在以后用的时候要注意。
好了,希望能够帮助到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马