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

f5emj3cl  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(147)

什么时候应该使用std::cin.getline()?它与std::cin有什么区别?

siotufzp

siotufzp1#

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

字符串

eivgtgni

eivgtgni2#

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

mnemlml8

mnemlml83#

您是否阅读了任何文档(例如http://www.cplusplus.com/reference/string/getline/)?
基本上,std::cin(或更一般地,任何std::istream)直接用于获得格式化的输入,例如int x; std::cin >> x;std::cin.getline()仅用于填充原始char *缓冲区。

ttisahbt

ttisahbt4#

(Very我的回答是,std :: cin.getline()可以包含空格,而std :: cin >>不能。

w8f9ii69

w8f9ii695#

正如其他人已经回答的那样(甚至更好),粗略地说,使用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)

pkln4tw6

pkln4tw66#

使用std::cin >> std::ws会跳过空格,特别是换行符,并在输入实际内容的地方继续阅读。

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

字符串

相关问题