std :: cin.getline()与std :: cin

Sim*_*ity 31 c++ cin getline

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

MSa*_*ers 34

让我们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
Run Code Online (Sandbox Code Playgroud)


小智 20

在使用char*的情况下,std::cin.getline获取行,而不是std::cin获得第一个单词.

  • 我不明白这个答案.`std :: cin`没有得到任何东西; 它只是一个对象.在做任何事情之前,你必须对它做一些事情(例如,调用像`get`这样的成员函数). (8认同)
  • `std :: cin >> s1`是对全局函数`istream&operator >>的调用(istream&,char*)` (4认同)
  • 这个答案需要编辑。措辞和解释令人困惑 (2认同)

Oli*_*rth 9

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

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

  • 成员getline没有得到`std :: string`,它用于填充`char*`缓冲区.获取`std :: string`的getline是自由函数`std :: getline`. (4认同)