我是编程新手,我对C ++中的get()
和getline()
函数有一些疑问。
我对这两个功能的理解:
getline()
函数读取整行,并使用Enter键传输的换行符来标记输入的结束。 get()
函数与getline()
非常相似,但不是读取并丢弃换行符,get()
将该字符留在输入队列中。
我正在阅读的这本书(C ++ Primer Plus)建议使用get()
而不是getline()
。我的困惑是getline()
比get()
更安全,因为它确保与'\n'
结束。另一方面,get()
只会挂起输入队列中的字符,从而可能导致问题?
答案 0 :(得分:13)
有相同数量的优点和缺点,并且 - 基本上 - 都取决于您正在阅读的内容:get()
将分隔符留在队列中,因此您可以将其视为下一个输入的一部分。 getline()
丢弃它,因此下一个输入就在它之后。
如果你正在谈论控制台输入中的换行符,丢弃它是非常有意义的,但是如果我们考虑来自文件的输入,你可以使用" delimiter"下一个字段的开头。
什么是"好"或者"安全"要做,取决于你在做什么。
答案 1 :(得分:6)
get()
从流中提取char并返回其值(转换为整数),而getline()
用于逐行从文件中获取一行。通常,getline用于过滤掉具有平面文件(有数千行)的应用程序中的分隔符,并希望使用某个分隔符提取输出(逐行),然后对其进行一些操作。
答案 2 :(得分:1)
cin.getline()
最多读取“ \ n”的输入并停止
cin.get()
最多读取'\ n'的输入并将'\ n'保留在流中
例如:
char str1[100];
char str2[100];
cin.getline(str1 , 100);
cin.get(str2 , 100);
cout << str1 << " "<<str2;
input:
1 2
3 4
输出1 2 3 4 //输出扩展
反转时
例如:
char str1[100];
char str2[100];
cin.get(str2 , 100);
cin.getline(str1 , 100);
cout << str1 << " "<<str2;
input:
1 2
3 4
输出1 2 //输出未扩展,因为cin.getline()读取了'\ n'
答案 3 :(得分:-1)
cin.get()接受整行的输入,其中包括行尾空格重复它将消耗下一整行,但getline()用于逐行从文件中获取一行。