c++的cin一直十分迷糊,但cin在笔试中应用频率很高,因此来详细地整理一下其用法及原理。
cin是类istream类的对象,主要用于从标准输入读数据。
输入缓冲区:从键盘输入字符串的时候 需要敲一下回车 才能将这个字符串送入缓冲区 敲入的回车键也会被转换为换行符\n,这个换行符会被存储在cin的缓冲区,并被当做一个字符来计算。
缓冲区中有数据时,cin才会读取,否则不会读取。
cin可以连续从键盘读取想要的数据,以空格、tab或换行符作为分隔符
输入:
a b c
cin>>a>>b>>c;
则可以分别赋值给a(a) b(b) c(c)
不想忽略空白符时,则使用noskipws流控制,(新cin)cin>>noskipws>>input;(会读入空格)
开头空白字符会忽略并清除
字符后面的分隔符是残留在缓冲区的,cin>>不做处理
cin等价于cin.operator>>(),可以操作各类对象?
连读?
getline读取数据时,不阻塞请求键盘输入,而是直接读取,送入目标字符串时,再将换行符替换为空字符‘\0’
getline(cin,test);?
getline 与cin 的关系
cin.get()从输入缓冲区读取单个字符时,不忽略分隔符,直接将其读取
c++中定义了一个在std名字空间的全局函数getline,因为这个getline函数的参数使用了string字符串,所以声明在了<string>头文件中了。
getline利用cin可以从标准输入设备键盘读取一行,到文件结束/遇到函数界定符/输入达到最大限度会停止
getline遇到结束符时,会将结束符一并读入指定的string中,再将结束符替换为空字符,因此从键盘读取一行字符时,建议使用getline
cin状态量:是否可读!(缓冲区空则不可读,不空则可读)
cin遇到换行符,就停止读取了
键盘输入其实没有行的概念,只有换行符的概念