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
你有阅读过任何文档(例如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
。 - etarion简单来说,std::cin.getline()
可以包含空格,而 std::cin >>
不能。
如其他回答中已经讲解,使用 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)
cin.ignore()
只会丢弃一个字符,而 cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
会丢弃该行的其余部分,包括换行符。在这种情况下使用 cin.ignore()
似乎没有意义,因为 cin>>a
只会读取一个单词。因此,您不能假设下一个字符是换行符。 - Andreas Wenzel
std::cin
不会获取任何东西;它只是一个对象。在它执行任何操作之前,你必须对它进行某些操作(例如调用像get
这样的成员函数)。 - CB Baileychar s1[256], s2[256]; std::cin >> s1; cin.getline(s2, 256);
- alvelcomstd::cin >> s1
是调用全局函数istream& operator>>(istream&, char*)
。 - eq-