黑马程序员技术交流社区

标题: 关于scanf函数的一个疑问! [打印本页]

作者: 诺微_    时间: 2014-11-17 00:09
标题: 关于scanf函数的一个疑问!
在printf函数中\n是换行的意思,但是在scanf函数中\n到底是什么意思?加上\n与不加\n有什么本质区别?望解答!

QQ20141116-2.png (227.15 KB, 下载次数: 143)

QQ20141116-2.png

作者: 邵起    时间: 2014-11-17 08:12
同样是换行的作用,试想一下,你输入一次,换一次行,再输入一次又换一次行,于是,你的scanf函数就出不去了,所以这个函数不用\n
作者: supergcs    时间: 2014-11-17 08:48
scanf函数不能加\n 不然你输入后敲入的回车只能代表你的\n 不能代表输入完结
作者: 万雷    时间: 2014-11-17 08:54
楼上说的很正确
作者: 诺微_    时间: 2014-11-17 21:04
邵起 发表于 2014-11-17 08:12
同样是换行的作用,试想一下,你输入一次,换一次行,再输入一次又换一次行,于是,你的scanf函数就出不去 ...

有点不明白呢,能再解释下嘛?没有出不来啊,上图是我运行的顺序几结果!
作者: caozhichao    时间: 2014-11-18 02:36
你这运行的是一个程序?
一个22,一个33?44哪去了   感觉乱七八糟的
作者: sfm    时间: 2014-11-18 08:00
scanf函数中如果添加\n,那么你输入的时候也要在后面加上\n,否则不会结束输入
作者: 我爱吃丶柠檬    时间: 2014-11-18 10:31
你看学习视频了吗,我记得里面好像有说,回车也相当于输入一个字符
作者: 彈指っ紅顏老    时间: 2014-11-18 11:52
区别太明显了啊,假设scanf里面没有\n,操作顺序应该是运行->提示输入num1->输入22->回车->提示输入num2->33->回车->输出两个数值及它们的和(不需要你输44什么的这类没意义的东西)。
scanf里面有换行符就意味着它不但要接收你输入的数值(或许是字符等等),还需要接收你一个换行符(回车),所以当你输完数据之后按回车代表的并不是确认并执行下一步,而是让scanf去接收你的换行符,而且甚至会影响后续函数语句的执行,所以明杰老师视频中明确说过,不要在scanf里面放\n。

作者: 诺微_    时间: 2014-11-18 22:06
彈指っ紅顏老 发表于 2014-11-18 11:52
区别太明显了啊,假设scanf里面没有\n,操作顺序应该是运行->提示输入num1->输入22->回车->提示输入num2->3 ...

恩恩       想明白啦     谢谢指教!
作者: 诺微_    时间: 2014-11-18 22:10
caozhichao 发表于 2014-11-18 02:36
你这运行的是一个程序?
一个22,一个33?44哪去了   感觉乱七八糟的

是运行的一个程序啊     开始运行 提示我输入一个数值    我输入22    按回车键     又卡主了    我就有输入了一个33     然后提示输入第二个数值     我就数了一个44   按回车    结果出来      num1=22,num2=33
作者: itDave    时间: 2014-11-18 23:19
scanf函数千万別加\n,虽然我知道你的意图,scanf是从缓冲区读取字符,如果你加了\n,那么就会陷入循环,scanf会不不停读取缓冲区吧。我是这么理解的
作者: 诺微_    时间: 2014-11-18 23:53
itDave 发表于 2014-11-18 23:19
scanf函数千万別加\n,虽然我知道你的意图,scanf是从缓冲区读取字符,如果你加了\n,那么就会陷入循环,sc ...

你说呢缓冲区,对小白来说,有点高。必须的加油!
作者: itDave    时间: 2014-11-18 23:55
诺微_ 发表于 2014-11-18 23:53
你说呢缓冲区,对小白来说,有点高。必须的加油!

大家都差不多,都是从小白一路过来的,都是大牛了,就不来黑马了。你说呢?嘿嘿
作者: itDave    时间: 2014-11-18 23:56
诺微_ 发表于 2014-11-18 23:53
你说呢缓冲区,对小白来说,有点高。必须的加油!

大家都差不多,都是从小白一路过来的,都是大牛了,就不来黑马了。你说呢?嘿嘿
作者: 云无心ii    时间: 2014-11-19 14:41

scanf函数不能加\n 不然你输入后敲入的回车只能代表你的\n 不能代表输入完结,所以意思就是要2个回车代表输入完结
作者: 诺微_    时间: 2014-11-19 21:24
itDave 发表于 2014-11-18 23:56
大家都差不多,都是从小白一路过来的,都是大牛了,就不来黑马了。你说呢?嘿嘿 ...

此言有理   你现在到哪里了?
作者: 诺微_    时间: 2014-11-19 21:25
云无心ii 发表于 2014-11-19 14:41
scanf函数不能加\n 不然你输入后敲入的回车只能代表你的\n 不能代表输入完结,所以意思就是要2个回车代表 ...

恩恩   是的   但是只有一个scanf函数的话加了\n就进入循环了
作者: 云无心ii    时间: 2014-11-20 18:26
诺微_ 发表于 2014-11-19 21:25
恩恩   是的   但是只有一个scanf函数的话加了\n就进入循环了

我错了,还以为敲2回车就可以结束 刚刚自己去试了试 确实是会陷入循环 具体机制好像上面大神有说
作者: joykerl    时间: 2014-11-20 19:21
就是用户输入的方式不一样而已
作者: 诺微_    时间: 2014-11-20 21:08
云无心ii 发表于 2014-11-20 18:26
我错了,还以为敲2回车就可以结束 刚刚自己去试了试 确实是会陷入循环 具体机制好像上面大神有说 ...

是的   只有一句就会陷入循环   如果是两句就成我上面图片的那样啦
作者: 诺微_    时间: 2014-11-20 21:09
joykerl 发表于 2014-11-20 19:21
就是用户输入的方式不一样而已

用户输入方式???
作者: joykerl    时间: 2014-11-20 21:18
诺微_ 发表于 2014-11-20 21:09
用户输入方式???

我平时写输入函数都不加\n的,你不加就好了
作者: liangkun097    时间: 2014-11-20 21:41
视频里有讲到啊,scanf是不可以加\n的,不然的话会进入死循环的
作者: 诺微_    时间: 2014-11-20 23:03
liangkun097 发表于 2014-11-20 21:41
视频里有讲到啊,scanf是不可以加\n的,不然的话会进入死循环的

是的   有讲!   但是如果回车进入循环后再随便输入一个值   就跳出循环了   继续执行了  但是结果会大相径庭
作者: 诺微_    时间: 2014-11-20 23:04
joykerl 发表于 2014-11-20 21:18
我平时写输入函数都不加\n的,你不加就好了

恩恩   知道了! 就是有点搞不清楚具体原因
作者: hityu    时间: 2014-11-20 23:46
scanf里“”里部分规定的是输入格式,也就是说如果在scanf里有\n,那么你必须输入换行才能代表输入结束,希望能够帮助到你




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2