- 只有比别人更早、更勤奋地努力,才能尝到成功的滋味
今天在网上做一道题时偶然发现,原来gets竟然比scanf快。以下是程序运行时间对比:
Gets的: (30ms)
#include <stdio.h> #include <string.h> int main() { int from,end,l; char str[5]; char t; while(gets(str)) { l=strlen(str); from=0; end=l-1; while(from<end) { t=str[from]; str[from++]=str[end]; str[end--]=t; } printf("%s\n",str); } return 0; } /************************************************************** Problem: 1058 Language: C Result: Accepted Time:30 ms Memory:912 kb ****************************************************************/
scanf 的: (40ms)#include <stdio.h> #include <string.h> int main() { int from,end,l; char str[5]; char t; while(scanf("%s",str)!=EOF) { l=strlen(str); from=0; end=l-1; while(from<end) { t=str[from]; str[from++]=str[end]; str[end--]=t; } printf("%s\n",str); } return 0; } /************************************************************** Problem: 1058 Language: C Result: Accepted Time:40 ms Memory:912 kb ****************************************************************/
以下内容转载自:
scanf 和 gets 读取字符串
深入了解scanf()/getchar()和gets()等函数
scanf与gets函数读取字符串的区别
今天看到一段话,大致是说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)。