cin,cin.get()等异同点[面试题系列]
函数原型
- cin
- cin.get(void);cin.get(char&);cin.get(char *,int n);cin.get(char*,int n,char)
- getchar() = cin.get(void)
- cin.getline(char*,int n);cin.getline(char*,int n,char)
- getline(cin,string& line)
cin
- cin永远会跳过空白(空格、tab、enter)
- cin在遇到第一个类型不匹配的字符时会停止读取。对于int等类型的容器,cin的这个特性是更鲜明的。对于char等类型(char string vector<char>等),不存在类型不匹配的字符,因此只会按照第一点的原则,即使遇到空白时停止。因此空白更像是一种数据分割标志,而非数据本身。
- cin在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
cin.get(void)
- 从输入流取一个数据,并返回这个数据,而不是输入流引用cin
cin.get(char&)
- 从输入流取一个数据赋值给char
- 在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
cin.get(char*,int n)
- 从输入流中取数据,放入char*位置。
- 取完n-1个字符停止,最后一个字符补'\0'
- 遇到换行符也结束,换行符留在输入流中
- 在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
cin.get(char *,int n,char)
- 从输入流中取数据,放入char*位置。
- 取完n-1个字符停止,最后一个字符补'\0'
- 遇到char指定的字符也结束,该字符留在输入流中
- 在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
cin.getline(char*,int n)
- 从输入流中取数据,放入char*位置。
- 取完n-1个字符停止,最后一个字符补'\0'
- 遇到换行符也结束,换行符被丢弃
- 在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
cin.getline(char*,int n,char)
- 从输入流中取数据,放入char*位置。
- 取完n-1个字符停止,最后一个字符补'\0'
- 遇到char指定的字符也结束,该字符被丢弃
- 在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
getline(cin,string& line)
- 从输入流中取数据,放在line中
- 遇到换行符结束,换行符被丢弃
- 在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
相同点
- 除了cin.get(void),在遇到文件结尾时会设置eofbit,可使用cin.eof()查看;在没有成功取到数据时,会设置failbitt,可使用cin.fail()查看。
- 会返回输入流引用cin
区别
- cin.get(void)、cin.get(char&)用于取单个字符
- cin.get(char*,int n)、cin.getline(char*,int n)用于取整行字符串
- getline(cin,string& line)在<string>头文件中,可动态增容