cin、scanf、gets、getchar 用法介绍

时间:2021-04-05 17:32:38
scanf是格式化输入,printf是格式化输出。
cin是输入流,cout是输出流。效率稍低,但书写简便。

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

来源:
http://blog.csdn.net/cyuyanenen/article/details/51602922

一、scanf 
scanf一般可用于读取数字、字符、字符串; 
结论: 
(1)当 scanf 从缓冲区中读取单个字符(%c)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 不会将其忽略,会读取并清除。 
(2)当 scanf 从缓冲区中读取数字或字符串(非单个字符)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,scanf 不做处理。 
(3)scanf 读取字符串时,当遇到空格、回车和Tab键都会认为输入结束。当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。(所以它不能接收包含空格、回车或Tab等的字符串) 
(4)scanf() 读取字符串时, 
语法:scanf(“格式控制字符串”,变量地址列表); 
接受字符串时:scanf(“%s”,字符数组名或指针);

二、gets 
gets 一般只用于读取字符串; 
结论: 
(1)gets可以接收空格,遇到回车认为输入结束; 
(2)gets 可接受回车键之前输入的所有字符,并用’\n’替代 ‘\0’。回车键不会留在输入缓冲区中。 
(3)gets() 读取字符串时,
语法:gets(字符数组名或指针); 
(4)gets(s) 函数中的变量s为一字符串指针。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。 
(5)gets函数可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

三、getchar 
getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab);注意,getchar函数只能接受单个字符,输入数字也按字符处理,输入多于一个字符时,只接收第一个字符。 

四、cin 
该操作符是根据后面变量的类型读取数据。 
输入结束条件 :遇到Enter、Space、Tab键。 
对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab) 
结论: 
(1)当cin>>从缓冲区中读取数据(不论是字符、数字或字符串)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。