cin 与 scanf 的不同

cin输入更方便:

首先,cin 是个C++类型对象,它的类型是basic_istream,scanf 是个不定参数的函数,
其次,cin 所属的类重载了 >> 运算符,使输入更简单了,比如 
double d; cin>>d;
而 scanf 不一样的,
double d;scanf("%lf",&d);
看起来麻烦一点。
另外,cin 也更安全,不会发生内存溢出。
char c; scanf("%lf",&c); //这时需要8个字节的空间,但只提供一个,内存溢出。
而 cin 也更安全
char c;cin>>c; //只输入字符,不会溢出

从底层上来说,C++ 的 cin 与 C语言的 scanf 都采用 stdin 作为输入源, 但cin和scanf 采用了不同的缓冲区,可以通过 ios 头文件里面的 sync_with_stdio () 函数设置缓冲区共享,使cin和scanf 共享缓冲区。
C++也可以改变输入源,但这样很复杂。
其实,C++对 stdin 进行了封装,用流和迭代器进行了转变了流的概念而已,而C的scanf直接操作 stdin而已

scanf 比 cin 更快,用cin输入超时是常有的事~

最新的G++,cin已经比scanf快了,在scanf超时的情况下可以尝试使用G++提交

对于字符:cin的输入忽略空格和回车

 
时间: 2024-12-18 20:36:19

cin 与 scanf 的不同的相关文章

标准输入的原理:cin与scanf

1.cin 的处理方式 1)如果cin读取整数,会自动忽略换行和空格:遇到文件结束标记,cin  >> a返回的数false int a; while(cin >> a){ cout << a <<endl; } return 0; eg:1, 2, 3 1 2 3 1 a 2 a 1 2 注意:cin读取到'a'字符的时候,如果是cin> (int);那么此时cin返回false, 同时读到变量a中的整数是0:如果是\n\r,那么将自动忽略: 2)

cin和scanf的速度差别

好长时间没有遇到这种问题了,以前虽然知道scanf比cin快,但是没想到快这么多,见图. 50万的数据. scanf输入: cin输入: 网上说用std::ios::sync_with_stdio(false);可以优化.优化完的速度: 还和纯scanf差好多.

关于cin,getchar(),scanf()的注意事项(转)

  问题描述一:(分析scanf()和getchar()读取字符) scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的.但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因.下面先看一个很简单的程序:程序1:    #include <stdio.h>    int main()    {char ch1, ch2;scanf("%c", &ch1); scanf("%c", &

c++获取键盘输入cin、scanf使用详解

cin是c++标准,scanf是在c中使用的 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 5 using namespace std; 6 7 int main() 8 { 9 /* 10 strlen包含在string.h头文件里,加上 11 #include <string.h> 12 #include <cstring> // C语言头文件为 string.h

C++-cin与scanf cout与printf效率问题

http://blog.csdn.net/l2580258/article/details/51319387 void cin_read_nosync() { freopen("data.txt","r",stdin); std::ios::sync_with_stdio(false); for (int i=0;i<MAXN;i++) std::cin >> numbers[i]; }

scanf函数和cin的区别、类的数组、C++排序函数

给定n个字符串,将这n个字符串按照字典序进行排列,此处用排列函数是C++的库函数sort,产生如下两个疑问,望大佬解答 #include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; /* ********************************************** Q1:为什么定义类的数组,无法用sort函数排

加快cin的读入速度

加快cin的读入速度 虽然C++有cin函数,但看别人的程序,大多数人都用C的scanf来读入,其实是为了加快读写速度,难道C++还不如C吗!?其实cin效率之所以低,不是比C低级,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而且是C++为了兼容C而采取的保守措施. 先讲一个cin中的函数——tie,证明cin和scanf绑定是同一个的流. tie是将两个stream绑定的函数,空参数的话返回当前的输出流指针. 先码代码: #include <iostream> #include

什么时候,可以关闭cin和stdin的同步

一些情况下,我们为了保证cin的读取输出速度,会选择在代码开头添加这样一句代码 std::ios::sync_with_stdio(false); 它的功能就是关闭cin和stdin的同步.从而提高cin的速度.可以使cin比scanf更加快. 但是身为小白的我,第一次用的时候忽略了一个问题. 这句话的功能是取消cin和stdin的同步,也就是说如果你打代码里同时又cin,cout语句和scanf,prin语句,那么他们就不会同步了. 这意味着,即便你的输出是正确的,因为cin和stdin速度上

poj 1080 (LCS变形)

Human Gene Functions 题意: LCS: 设dp[i][j]为前i,j的最长公共序列长度: dp[i][j] = dp[i-1][j-1]+1;(a[i] == b[j]) dp[i][j] = max(dp[i][j-1],dp[i-1][j]); 边界:dp[0][j] = 0(j<b.size) ,dp[i][0] = 0(i< a.size); LCS变形: 设dp[i][j]为前i,j的最大价值: value(x, y)为比较价值: dp[i][j] = max(d