1、方法get(char &)和get(void)提供不跳过空白的单字符输入功能;
2、函数get(char * , int , char)和getline(char * , int , char)在默认情况下读取整行而不是一个单词;
它们被称为非格式转化输入函数,因为它们只是读取字符输入,而不会跳过空白,也不进行数据转换。
他们不同于cin是遇到空格即输出结束。
在使用char参数或没有参数的情况下,get()方法读取下一个字符,及时该字符是空格,制表符或换行符。get(char & ch)版本将输入字符赋给其参数,而get(void)版本将输入字符转换为整型(通常为int)。然后将其返回。
下面用例子简单说明它们的不同用法。
1、get(char&)
char ch;
cin.get(ch); while(ch != '\n'){ cout<<ch; cin.get(ch) }
当读取字符到换行符时结束,如果没有换行符判断,那么遇到输出结束时调用setstate(failbit)导致cin的测试结果为false
无参数的get()用法是
ch = cin.get();
其返回值为int。
对比cin.get(ch) 与 cin.get()
特征 cin.get(ch) ch = cin.get()
传输输入字符的方法 赋给参数ch 将函数返回值赋给ch
字符输入时函数的返回值 指向istream对象的引用 字符编码(int值)
到达文件尾时函数的返回值 转换为false EOF
2、字符串输入:getline(),get()
istream& get(char*, int, char); istream& get(char*, int); istream& getline(char*, int, char); istream& getline(char*, int);
第一个参数是存放字符串的内存单元地址,第二个参数要比最大字符数大1(存放'\0'),第三个参数指定用作分隔符的字符,默认是'\n';
那么这两个函数的区别在于getline()会丢弃读取到的分隔符,而get()不会。因此在遇到空行的时候两个函数的操作就不同。因为getline()会将换行符视作一个字符。
getline(char *, int) 如果没有读取任何字符(但换行符被视为读取了一个字符),则设置failbit
如果读取了最大数目的字符,且行中还有其他字符,则设置failbit
get(char *, int) 如果没有读取任何字符,则设置failbit
---------------------
参考:https://blog.csdn.net/qq_42128241/article/details/81772875