C语言 scanf()和gets()函数的区别
2015-10-03 15:04
288 查看
C语言 scanf()和gets()函数的区别
1.相同点:scanf( )函数和gets( )函数都可用于输入字符串
2.不同点:两者在功能上有所区别,具体区别如下:
要实现如下需求“从控制台输入字符串”有如下两种实现方式:
1>使用gets()函数实现
使用上诉代码实现时,我们会发现控制台打印如下信息:[即警告gets()是不安全的]
gets()函数总结:
(1)gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。
(2)可以用来输入带空格的字符串。
(3)可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出
2>使用scanf()函数实现使用上诉代码实现时,我们会发现控制台打印如下信息:【输入:hello BJS150940 但是只能输出:hello】
scanf()函数总结:
(1)scanf() 以
空格
或
回车符
结束读取,空格
或
回车符
会遗留在缓冲区。
(2)不能直接输入带空格的字符串。
注意:scanf()函数如何才能输入带空格的字符串,应使用:【具体代码和输出内容如下:】
scanf("%[^\n]", a); //%[]输入字符集, [^\n]
表示除了'\n'之外的字符都接收,即可以接收空格,这个可以用来输入带空格的字符串
说了那么多两个输入函数的区别,就上课那个例子循环输入一个字符,怎么样才能保证输入正常呢,仅需添加一句代码(取出缓冲区里特殊的空格和\n即可)即可具体代码段如下:
就是这么简单,仅仅一个缓冲区,各种效果,是不是很神奇,哈哈,这就是编程的乐趣。。。。
相关文章推荐
- struct 大小的计算
- 【C++】c++日期类Date
- Effective C++ 18-23
- C++中cin、cin.get()、cin.getline()、getline()、gets()、cin.ignore()函数详解
- C++学习(二)-继承与派生(1)
- c++的引用(二)
- C++复现经典游戏——扫雷
- 排序——C++函数调用
- 单向循环链表的实现C++封装
- C++使用对象指针
- C/C++头文件的作用和用法
- C/C++头文件的作用和用法
- RGB转jpg使用libjpeg库实现
- 双链表的实现C++封装
- C/C++语言中的函数参数传参三种对比
- c++ primer 练习5.25
- C++学习(一)-纯虚函数和抽象类(4)
- 单链表的实现C++封装
- c++的引用
- C2第一次作业