scanf和cin的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scanf和cin的区别相关的知识,希望对你有一定的参考价值。

为什么说scanf比cin快啊··
有些题目用cin就过不了,用scanf就可以过了··
为什么··请高手解释一下啊
谢谢··

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 共享缓冲区。
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的区别的主要内容,如果未能解决你的问题,请参考以下文章

关于scanf和cin的问题

c++中scanf和cout有啥区别

【重赏】关于cin与scanf的问题

关于scanf 与 cin gets(),getline()......输入输出字符串的区别

scanf为啥比cin效率要高?

scanf和cin