40

什么时候应该std::cin.getline()使用?它有什么不同std::cin

4

5 回答 5

43

让我们std::cin.getline()分开。首先,有std::. 这是标准库所在的命名空间。它有数百种类型、功能和对象。

std::cin就是这样一个对象。它是标准字符输入对象,在<iostream>. 它有自己的一些方法,但您也可以将它与许多免费功能一起使用。这些方法和函数中的大多数都是从标准输入中获取一个或多个字符的方法。

最后,.getline()std::cin(和其他类似对象)的一种方法。您告诉它应该从左侧的对象(std::cin此处)获取多少个字符,以及将这些字符放在哪里。确切的字符数可能会有所不同:.getline() 将在三种情况下停止: 1. 到达行尾 2. 输入中没有剩余字符(通常不会发生,std::cin因为您可以继续输入) 3. 最大读取字符数。

还有其他可以与std::cin对象一起使用的方法和功能,例如

  std::string s;
  int i;
  std::cin >> s; // Read a single word from std::cin
  std::cin >> i; // Read a single number from std::cin
  std::getline(std::cin, s); // Read an entire line (up to \n) from std::cin
  std::cin.ignore(100); // Ignore the next 100 characters of std::cin
于 2011-01-20T12:38:51.490 回答
26

如果使用 char*,std::cin.getline则获取行,而不是std::cin获取第一个单词。

于 2011-01-20T10:34:57.943 回答
10

您是否阅读过任何文档(例如http://www.cplusplus.com/reference/string/getline/)?

基本上,std::cin(或更一般地说, any std::istream)直接用于获取格式化输入,例如int x; std::cin >> x;. std::cin.getline()仅用于填充原始char *缓冲区。

于 2011-01-20T10:30:45.407 回答
3

(非常简单)我的答案是,std :: cin.getline()可以包含空格,而std :: cin >>不能。

于 2020-03-26T07:11:20.087 回答
1

正如其他人已经回答(甚至更好)粗略地说,用于getline()读取整行(即以 结尾的字符串\n)并读取与(整数、浮点数、双精度等)类型或单个单词cin>>var兼容的数字。var

在这个答案中,我想强调混合这两种方法时出现的一个问题。当你这样做时:

int a;
string s;
cin>>a;
getline(cin, s)

cin留下一个行尾\n, 字符,然后由 . 读取getline();。可以通过使用来克服这个问题cin.ignore()

int a;
string s;
cin>>a;
cin.ignore();
getline(cin, s)
于 2019-06-19T09:26:09.090 回答