繁体   English   中英

std::cin.getline() 对比 std::cin

[英]std::cin.getline( ) vs. std::cin

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

让我们把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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM