什么时候应该使用std::cin.getline()
?它与std::cin
有何不同?
答案 0 :(得分:32)
让我们分开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
答案 1 :(得分:20)
如果是char *,std::cin.getline
获取行,而不是std::cin
获得第一个单词。
答案 2 :(得分:9)
您是否阅读过任何文档(例如http://www.cplusplus.com/reference/string/getline/)?
基本上,std::cin
(或更一般地,任何std::istream
)直接用于获得格式化输入,例如, int x; std::cin >> x;
。 std::cin.getline()
仅用于填充原始char *
缓冲区。
答案 3 :(得分:1)
(非常简单)我的回答是,std :: cin.getline()
可以包含空格,而std :: cin >>
不能包含空格。
答案 4 :(得分:0)
正如其他人大致回答(甚至更好)一样,请使用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)