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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

使用scanf(“%d”,&a)接收的时候,后面的‘\n’被收进哪里去了呢?如果后面再来一句scanf("%c",&b);b会不会变成‘\n’谢谢大神们!

33 个回复

正序浏览
如果%d中不加\n符合时,你键盘输入第一个字符然后回车,此时回车符应该会被存入输入缓冲区内,接着被下一个scanf()语句接收。想要破这个问题,需要在第一个scanf中%d后面加'\n',这样你输入回车就与格式控制相同,则不会被存入缓冲区内。
回复 使用道具 举报
这个如果%d后面不加\n,你直接回车的话'\n'应该是被存到了缓冲区内然后被后面的句子给吸收掉了,想要破的话就得在%d后加\n,然后键盘中原样输入(需2次回车)才可以。
回复 使用道具 举报
回复 使用道具 举报
学习了:handshake
回复 使用道具 举报
有点晕了。。。。

回复 使用道具 举报
不会,回车只是表示输入的字符串结束
回复 使用道具 举报
不会的  
回复 使用道具 举报
13673696542 发表于 2015-5-27 20:01
今天测试了一下,的确是被第二个scanf接收了。不过我看了上课的笔记,老师当时说scanf会将空格、回车、制 ...

scanf会将连续输入的多个空格回车和Tab忽略掉;
scanf如果去获取多个整数,那么你输入的多个空格回车以及Tab也被系统忽略掉
回复 使用道具 举报
你从键盘输入一个整数,然后回车,那么这个整数和回车都会被送到电脑中,然后scanf会获取你输入的整数,回车还保留在电脑里等待下一个scanf去获取,如果没有去专门获取,那么这个回车就会在函数结束的时候被释放掉,我是这么理解的。
回复 使用道具 举报
又学到一点了,
回复 使用道具 举报
13673696542 发表于 2015-5-27 20:01
今天测试了一下,的确是被第二个scanf接收了。不过我看了上课的笔记,老师当时说scanf会将空格、回车、制 ...

额,这个.............
回复 使用道具 举报
yi95392 发表于 2015-5-26 22:57
早就测过了,\n就是会被吸收,你怎么不试试再回帖.

今天测试了一下,的确是被第二个scanf接收了。不过我看了上课的笔记,老师当时说scanf会将空格、回车、制表符当作终止数据输入。莫非老师当时讲错啦!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
\n是输入结束的标志,你这样输入的话编译的时候编译器会以为你结束输入了,但是实际你什么都没有输入,会报错
回复 使用道具 举报
fixer 中级黑马 2015-5-27 06:30:46
17#
围观大神的解答
回复 使用道具 举报
13673696542 发表于 2015-5-26 20:23
测试了才知道结果,你写两个scanf测试一下。

早就测过了,\n就是会被吸收,你怎么不试试再回帖.

Snip20150526_1.png (96.95 KB, 下载次数: 172)

Snip20150526_1.png
回复 使用道具 举报
scanf("%d\n",&a)
双引号内除了%d外,其它的必须原样输入;
例如输入456的时候,必须是  456\n  回车
回复 使用道具 举报
学习了,我也有同样疑问
回复 使用道具 举报
没明白什么意思
回复 使用道具 举报 1 0
12下一页
您需要登录后才可以回帖 登录 | 加入黑马