scanf和cin的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scanf和cin的区别相关的知识,希望对你有一定的参考价值。
为什么说scanf比cin快啊··
有些题目用cin就过不了,用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 共享缓冲区。
C++也可以改变输入源,但这样很复杂。
其实,C++对 stdin 进行了封装,用流和迭代器进行了转变了流的概念而已,而C的scanf直接操作 stdin而已
4.cin
和
scanf
在使用时的注意事项
(注:本文中的源代码没有包含头文件,实验时请自己编辑。)
请边看边操作,这样才能真正明白其中的窍门:
5.
scanf()
:
常用的有
(1)
scanf("%s",a);//a
为字符串的指针;
例:
int main()
char a[20];
scanf("%s",a);
printf("%s",a);//
输出字符串
a
中的字符
return 0;
注意
:
1,这种获得字符串的方法前面可以有回车符
'\n'
,注意哦!你可以试一下。输入
时在前面猛打回车,然后再输入一组字符,这样输出的还是你输出的字符。
2.试完了回车,重新运行一下,然后你在前面加
n
个空格,然后再输入一个连续的
字符,
看看会出现什么?你会发现他把前面的空格全忽略了。
如果你想要,
当然也可以,或
者用正则表达式,或者用
gets();
比如:
gets(a);
这样,你输入的空格也能记录下来了。
3.再试一下
输入一个连续长度的字符后加一个空格再输入:
比如输入一个人的名
字的时候“
Bill
Gates
”你会发现输出只有
Bill
,而
Gates
见鬼去了。所以名字的输入和上
面一样,最好用
gets();
函数。
(2)scanf("%c",&a);//
注意取地址符;
例:
int main()
char a;
scanf("%c",&a);
printf("%c",a);//
输出字符
a
中的字符
return 0;
注意:
在获得字符时如果有回车,
吸收之。
你可以这样试一下,
运行上面的程序,
回车一次,
仔细观察他空了几行。
(第一行是你敲的,第二行是
printf
输出的
a
的值)
,明白其中的奥妙
了么?
(3)
scanf("%d",&a);
例
int main()
int a;
scanf("%d",&a);
printf("%d",a);//
输出整形
a
中的值;
return 0;
注意:这个输入和(
1
)一样,会自动忽略前面的回车
'\n'(
其实就是个
ascII
码
) 参考技术A 为什么说scanf比cin快?
因为scanf是用指针操作的,没有类型安全机制,比如一个char类型数据你就可以用%f获得输入,而不会报错,但在运行时会出现异常。cin是自动判断你的变量类型,比如一个char数据只能用默认的char方法取数据。
另外,C中只能用scanf,在C++中两者都能用。
使用scanf需要包含stdio.h
使用cin需要包含iostream(没有.h)本回答被提问者采纳 参考技术B 如果你的原文件后缀名为.c则只支持c语言的语法,cin就通不过了,如果是.cpp则是C++的源文件,是可以兼容C的所以两者都可以 参考技术C scanf是c语言的函数。
cin是c++的ostream类的对象,重载了>>运算符。 参考技术D scanf是c语言的输入函数,包含在stdio.h
cin是c++的输入函数,包含在iostream.h
关于scanf 与 cin gets(),getline()......输入输出字符串的区别
很对人对于字符串的输入输出一直是比较模糊的,今天总结一下几个常用的输入流符号对于输入字符串时的区别:
1.scanf(),首先 它遇到空格或回车键(\n)就会结束,并且会将回车符算入字符串中;
2.cin ,对于cin来说,它不会把回车符(\n)算进字符串中,其他的与scanf()相同;
3.gets()和 getline(), 当你定义了一个字符数组,那么读入一行只能用gets(),需要注意的是:
(1)它只在遇到回车键时结束输入;
(2)它不会将回车键算到字符串中;
输出:
对于输出来说,你可以选择printf(),也可以用count()输出字符数组;
注意:
如果定义的是string s:
那么输入只能用getline(),不能用gets();
输出只能用count(),不能用printf();
以上是关于scanf和cin的区别的主要内容,如果未能解决你的问题,请参考以下文章