黑马程序员技术交流社区
标题:
scanf的原理是什么?
[打印本页]
作者:
⒈心只霸占沵
时间:
2014-5-17 21:19
标题:
scanf的原理是什么?
本帖最后由 ⒈心只霸占沵 于 2014-5-19 11:04 编辑
老师讲的scanf
int num1,num2;
scanf("%d %d",&num1,&num2);
空格 tab 回车
我想知道内部的原理
作者:
戒惜舍得
时间:
2014-5-17 22:19
比较 高深 想了下 没想出来。。 等大神
作者:
ios风痕
时间:
2014-5-17 22:29
本帖最后由 ios风痕 于 2014-5-17 23:16 编辑
scanf("%d %d",&num1,&num2);
其原理就是从键盘输入值,并把这个值的内存地址按输入顺序赋给&num1和&num2中,然后在调用的的时候就能找到。
作者:
戒惜舍得
时间:
2014-5-17 22:58
本帖最后由 戒惜舍得 于 2014-5-21 06:13 编辑
scanf读到空格时结束!
所以 如果你用空格 分开的话
Tab 键其实就是 多个空格 一起输入
当你按 回车 Tab时 scanf 知道了第一个 输入完毕,接着接受第二个。
楼主 明白了吗
祝楼主早日进黑马
作者:
Dr_。Zeor`
时间:
2014-5-18 16:32
&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”.
作者:
Dr_。Zeor`
时间:
2014-5-18 16:34
键盘缓冲区用来缓存“按键”的ASCII码,而scanf()每次从键盘缓冲区中读取一个字符(ASCII码),直到 键盘缓冲区为空。如果键盘缓冲区为非空状态,执行scanf()不会要求输入,如果键盘缓冲区为空,执行 scanf()则会等待用户的输入。
作者:
二狗
时间:
2014-5-18 20:27
scanf("%d %d",&num1,&num2);
当你写这个代码的时候你就把空格定义为这个scanf函数中的分隔符了
所以当scanf遇到你输入的数值的时候就把第一次空格之前的内容保存在&num1这个地址
空格之后的保存到&num2地址。
实际上scanf("%d%d",&num1,&num2); %d%d之间没用空格你也可以用回车 空格隔断俩个数值分别输入进去。
作者:
S捭K阖Y
时间:
2014-5-19 00:23
好的,我说一些自己对这个函数的理解,希望能够帮助到你
首先,一般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()函数读入数字,但是数据缓冲区存入了你输入的回车,下面的输入字符的那个函数会自动输入回车符。这点在以后用的时候要注意。
好了,希望能够帮助到你
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2