C++如何从cin读取一整行字符串?(getline用法)

17次阅读

std::getline是c++中读取整行字符串最常用且可靠的方式,从输入流读取至换行符(不含该符)并存入std::String;使用前若混用cin需调用cin.ignore()清缓冲区;支持自定义分隔符;应避免使用C风格的gets/fgets

C++如何从cin读取一整行字符串?(getline用法)

std::getline 读取一整行字符串,是最常用也最可靠的方式。它会读取从当前位置到下一个换行符之间的所有字符(不包括换行符本身),并存入 std::string 中。

基本用法:cin配合getline

std::getline标准库函数,定义在 头文件中。最常见写法是:

#include  #include  using namespace std;  int main() {     string line;     getline(cin, line);  // 读取一整行     cout << "你输入的是:" << line << endl;     return 0; }

注意:混用cin和getline前要清空缓冲区

如果在 getline 前用了 cin >>(比如读数字或单词),输入缓冲区里可能残留一个换行符,导致 getline 立即读到空行。

解决方法是在 getline 前调用 cin.ignore() 清掉这个残留:

立即学习C++免费学习笔记(深入)”;

  • cin.ignore(); —— 忽略一个字符(通常是换行符)
  • cin.ignore(1000, 'n'); —— 忽略最多1000个字符,直到遇到 'n' 为止(更安全)

getline支持自定义分隔符

第三个参数可以指定结束字符,默认是 'n'。例如用逗号分割:

string part; getline(cin, part, ',');  // 读到逗号就停

这在解析 csv 风格输入时很实用。

别用char数组+gets或fgets(C风格)

虽然 fgetsgets(已废弃)也能读行,但它们操作 C 风格字符串,容易越界、需手动管理长度,且与 std::string 不兼容。C++ 中应坚持用 std::string + getline

text=ZqhQzanResources