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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张晓珊 中级黑马   /  2015-6-3 15:19  /  870 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在做练习题的过程中,发现用scanf()只能输入连续的字符,中间有空格的话只会输入第一个单词。然后换用gets()来输入,结果虽然能输入了,但是运行后会报个警告,不安全的函数,这个怎么破?

7 个回复

倒序浏览
sacnf()缺点就是不能接收空格,gets()如果接收的字符串超过定义好的长度时,还会继续输入,所以不安全
回复 使用道具 举报
fgets()倒是挺好的,不过很麻烦!我也是在学习,多多交流
回复 使用道具 举报
Never_Yg 发表于 2015-6-3 17:54
sacnf()缺点就是不能接收空格,gets()如果接收的字符串超过定义好的长度时,还会继续输入,所以不安全 ...

哦,原来如此,那到底该怎么输出呢,有什么两全的方法呢?
回复 使用道具 举报
scanf()读的是缓冲区的值,空格也相当于一个字符,scanf()认为它也是输入的一个字符,所以后面的字符就无效了
回复 使用道具 举报
scanf()读的缓冲区的值,当用户输入内容时,该内容会被放到输入缓冲区内,然后scanf()会根据格式控制的要求从输入缓冲区内读取它想要的内容。如果从缓冲区得到的内容与格式控制的字符不一样时会输出-1.其实你输入的空格和回车已经逗号都属于字符,所以当输入空格后,scanf()会认为这是你输入的内容,所以,空格后面的字符就无效了。
回复 使用道具 举报
参考:
用scanf函数接受hello world 的方法
http://bbs.itheima.com/thread-201069-1-1.html
(出处: 黑马程序员IT技术论坛)
回复 使用道具 举报
scanf 接收 字符就是特麻烦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马