puts() 和 scanf() 区别大吗

来源:互联网 发布:开淘宝店页面图片 编辑:程序博客网 时间:2024/04/29 12:45

之前从来没感觉有区别,可是自从做了【51nod】1384 全排列 发现在输出的数据量大的时候区别还是挺明显的。在输出字符串时,发现用puts(s)判了是45ms 而用scanf(“%s\n”,s)却是921ms 用for(i 0 to len)printf(“%c”,s[i]) 就超时了。显然puts()效率高很多,至于为什么呢?

有些打印函数的额外开销比别的打印函数要多。“额外开销”是指与其它函数相比,某个函数必须做的额外工作。例如,printf()的额外开销就比puts()多。

puts()函数是很简单的,它接受一个字符串并把它写到显示器屏幕上。当然,printf()函数也能做同样的工作,但它还要做大量其它的工作——它要分析送给它的字符串,以找出指示如何打印内部数据的那部分特殊代码。

也许你的程序中没有特殊字符,而且你也没有传递任何这样的字符,但不幸的是,printf()无法知道这一点,它每次都必须检查字符串中是否有特殊字符。

函数putch()和puts()之间也有一点微小的差别——在只打印单个字符时,putch()的效果更好(额外开销更少)。

参考文章 http://c.biancheng.net/cpp/html/1663.html

0 0