gets()
#include <stdio.h> //这个头文件包含gets()函数,这个函数在ISO/IEC 9899 2011(C11)标准中被移除int main(void){ char str1[5]; //不要char*p,然后gets(p),这是错误的,因为p没有指向有效的内存,它可能指向任何非法地址 // 地方的未知大小的内存块,这样以来,就可能修改了不属于本程序的内存的内容 gets(str1); printf("%s\n", str1); return 0;}先看原型:
char * gets(char * ptr);
int getchar(void);
作用是:
gets()用于从标准输入流stdin读入一个整行(以'\n'或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的'\n'从流中取出,但不写入数组。gets()不检查被写入的数组大小。
getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。
今天看到一段话,大致是说gets比scanf()快,有点吃惊,搜了一下,scanf()和gets的区别大致有着几条:
1.scanf() 会忽略行开头的所有空格,并以空格、换行符结束输入;
使用getchar()读取scanf语句执行后,缓冲区留下的换行符,
gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替;
2. 在数据大量的情况下,用gets读取快于scanf()10倍以上(注:来自pudn,只有一段开头话)
3.
第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
读取字符时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()以Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
第二:为了避免出现上述问题,必须要清空缓冲区的残留数据,可以用以下的方法解决:
方法1:C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
这个函数是fflush(stdin)。
方法2:自己取出缓冲区里的残留数据。
(说实话这个语句我也没看懂,呵呵!为什么格式控制是这样的!希望高手指点一下!)
scanf("%[^\n]",string);
随机推荐
- border表格有的自动换行,有的不能自动换行!
解决手机端tab超过设置的宽度换行! <table id="vip-tab"> <tr id="leibie"> <th clas ...
- myeclipse2014安装aptana3.4.0插件
1.下载aptana3.4.0_eclipse的zip包 http://pan.baidu.com/s/1qXOiZl6 2.打开myeclipse2014,选择help→install from ...
- vs2008编译wxWidgets 2.8.12
用vs2008编译wxWidgets 2.8.12 FileZilla客户端源码3.5.3及以上版本依赖wxWidgets 2.8.12或更高版本,因此,编译FileZilla客户端首先需要编译wxW ...
- 转:条件变量、pthread_cond_init
1.初始化条件变量pthread_cond_init #include <pthread.h>int pthread_cond_init(pthread_cond_t *cv,const ...
- JavaScript创建读取cookie代码示例【附:跨域cookie解决办法】
使用JavaScript 原生存取cookie代码示例: var cookie = { set : function(name, value, expires, path, domain, secur ...
- [BZOJ2339][HNOI2011]卡农
[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...
- php 原生能力进阶
<?php header("Content-type:text/html;charset=utf-8"); $arr=200; $result =($arr%2==0||$a ...
- 详解Bootstrap 定义按钮的样式(CSS)
以下样式可用于<a>, <button>, 或 <input> 元素上: 更多关于Bootstrap 定义CSS样式的可查看:http://v2.bootcss.c ...
- 你应该知道的CSS文字大小单位PX、EM、PT
这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章, 题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平时都是用 ...
- deepin2014.1安装搜狗后却找不到图标及配置
点开Input Method Configration; 点左下角添加输入法; 将Only Ohow Current Language前 的勾去掉,选择出现的搜狗输入法. FYI.