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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 77媛儿 中级黑马   /  2014-2-26 15:59  /  3018 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.gets函数可以一次接收一行输入串,其中可以有空格,也就是说空格可以做为字符串的一部分输入.
而scanf函数接收的字符串不会含有空格,即遇到字空格时,认为字符串输入结束,也就是说空格是scanf默认的结束符号。scanf和gets不能混合使用,如果一个程序中用scanf的话,一般不能再用gets,反之亦然。
2.gets()输入字符串时,可以包含空格在内的字符,在回车时,自动将字符串结束标志'\0'赋予字符数组最后一个元素。scanf函数不能输入包含空格字符的字符串,也就是说空格是scanf默认的结束符号。
3.如果像你在你的程序中提到的只把for循环中gets改为scanf的话,在后面该输入的时候直接跳过的原因是,在结束前一个scanf输入时输入的回车被后一个gets输入时接受,也就是说前一个地方输入的“数据+回车”分别被两个地方接受。此种问题会出现在gets和scanf交接处。只需要在程序中统一改为scanf和gets就可以了。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1 总结的不错

查看全部评分

9 个回复

倒序浏览
但是用gets()函数在Xcode里会警告不安全,怎么破呢?

  1. warning: this program uses gets(), which is unsafe.
复制代码
回复 使用道具 举报
meegor 发表于 2014-3-8 11:02
但是用gets()函数在Xcode里会警告不安全,怎么破呢?

我是直接无视了。。。。。
回复 使用道具 举报
很经典哦
回复 使用道具 举报
这回复 给力啊 又学了点新东西
回复 使用道具 举报
同样的问题
回复 使用道具 举报
我之前就遇到了这样的问题,始终输入不了一个完整的英文句子,每次只是输出第一个单词,找了好久才找到原因的。
回复 使用道具 举报
我想说,我也想总结这个知识点,但是你总结的很好了,所以我很难过
回复 使用道具 举报
恩,谢谢啦,总结的很好
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马