scanf()、getchar()、gets()、cin之间的区别

时间:2021-04-28 17:32:16

scanf()、getchar()、gets()、cin之间的区别

http://blog.sina.com.cn/s/blog_6c26d57b01011qzn.html

scanf()、getchar()、gets()

第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!
读取字符时:
scanf()SpaceEnterTab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);
getchar()Enter结束输入,也不会舍弃最后的回车符;
读取字符串时:
scanf()SpaceEnterTab结束一次输入
gets()Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!第二:为了避免出现上述问题,必须要清空缓冲区的残留数据,可以用以下的方法解决:
方法1C语言里提供了函数清空缓冲区,只要在读数据之前先清空缓冲区就没问题了!
      这个函数是fflush(stdin)
方法2:自己取出缓冲区里的残留数据。
scanf("%[^\n]",string);


cin

.cin<<

该操作符是根据后面变量的类型读取数据。

输入结束条件  :遇到EnterSpaceTab键。(这个很重要!)

对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(EnterSpaceTab)



二.cin.get()

该函数有三种格式:无参,一参数,二参数

cin.get(), cin.get(char ch), cin.get(array_name,Arsize)

读取字符的情况:

输入结束条件:Enter

对结束符处理:不丢弃缓冲区中的Enter

cin.get() cin.get(char ch)用于读取字符,他们的使用是相似的,

即:ch=cin.get() cin.get(ch)是等价的。


三.cin.getline()

cin.getline() cin.get(array_name, Arsize)的读取方式差不多,以Enter结束,可以接受空格字符。按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。

但是这两个函数是有区别的:

cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。