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

时间:2014-11-11 19:58:23

标签: c++ get cin getline

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

我对这两个功能的理解:

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

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

4 个答案:

答案 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()用于逐行从文件中获取一行。