cin.get()和cin.getline()之间的区别

问题描述 投票:6回答:4

我是编程新手,我对C ++中的get()getline()函数有一些疑问。

我对这两个功能的理解:

getline()函数读取整行,并使用Enter键传输的换行符来标记输入的结束。 get()函数很像getline(),但不是读取并丢弃换行符,get()将该字符留在输入队列中。

我正在阅读的这本书(C ++ Primer Plus)建议在get()上使用getline()。我的困惑是,getline()不比get()更安全,因为它确保与'\n'结束。另一方面,get()只会挂起输入队列中的字符,从而可能导致问题?

c++ get cin getline
4个回答
13
投票

有相同数量的优点和缺点,并且 - 基本上 - 都取决于您正在阅读的内容:get()将分隔符留在队列中,因此您可以将其视为下一个输入的一部分。 getline()丢弃它,所以下一个输入将在它之后。

如果您正在谈论控制台输入中的换行符,那么丢弃它是非常有意义的,但如果我们考虑来自文件的输入,您可以使用“分隔符”作为下一个字段的开头。

什么是“好”或“安全”,取决于你在做什么。


7
投票

get()从流中提取char并返回其值(转换为整数),而getline()用于逐行从文件中获取一行。通常,getline用于过滤掉具有平面文件(具有数千行)的应用程序中的分隔符,并希望使用某个分隔符提取输出(逐行),然后对其执行某些操作。


2
投票

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'


-1
投票

cin.get()接受整行的输入,其中包括行尾空格重复它将消耗下一整行,但getline()用于逐行从文件中获取一行。

© www.soinside.com 2019 - 2024. All rights reserved.