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