cin与scanf

好好的5.20我...我刷题容易吗我,今天刷了一道题一直TLE,
虽然以前有注意过scanf比cin快点,但没有细究,知道今天,把我弄惨了,好好总结了。

以下来自热心网友:
1.cin 是个C++类型对象,它的类型是basic_istream,scanf 是个不定参数的函数,
2.cin 所属的类重载了 >> 运算符,使输入更简单了,比如
double d; cin>>d;
而 scanf 不一样的,
double d;scanf("%lf",&d);
看起来麻烦一点。
另外,cin 也更安全,不会发生内存溢出。
char c; scanf("%lf",&c); //这时需要8个字节的空间,但只提供一个,内存溢出。
而 cin 也更安全
char c;cin>>c; //只输入字符,不会溢出
3.从底层上来说,C++ 的 cin 与 C语言的 scanf 都采用 stdin 作为输入源, 但cin和scanf 采用了不同的缓冲区,可以通过 ios 头文件里面的 sync_with_stdio () 函数设置缓冲区共享,使cin和scanf 共享缓冲区。

以下转载他人:
1.scanf是格式化输入,printf是格式化输出。

2.cin是输入流,cout是输出流。效率稍低,但书写简便。

格式化输出效率比较高,但是写代码麻烦。流输出操作效率稍低,但书写简便。

cout之所以效率低,正如一楼所说,是先把要输出的东西存入缓冲区,再输出,导致效率降低。

3.缓冲区比较抽象,举个例子吧:

曾经就遇到过这样的情况(类似的),

int i;

cout<<'a';

cin>>i;

cout<<'b';

运行结果什么都没看到输出,输入一个整型比如3再按回车后ab同时显示出来了。

但是这样的情况并不是经常发生,是在一些比较大型的工程中偶尔出现,原因是字符a先到了缓冲区,但是没输出,等输入了i,b进入缓冲区后再一并输出的。流输入也是差不多的。

关于C++中用iostream好还是stdio.h比较好

这个问得的确不好回答了。。

iostream.h和stdio.h是C++的两个头文件,里面是对于一些类,操作符,函数的定义,头文件本身应该没有好坏之分吧~~

又查了一下,最新的G++,cin已经比scanf快了,ACM如果scanf超时的话可以用G++提交一下试一下,呵呵,不过,我以后还是打算老老实实的用scanf。。

cin的实时性较差,因为它使用了缓冲区,一般情况下满了才刷新的。
对于字符:cin的输入忽略空格和回车。scanf("%c",&i)等价于i = getchar(),换行符和回车都会被读入。

转自:https://blog.csdn.net/deng529828/article/details/6173655

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值