在C++中,使用cin读取字符串时会在空格处截断,因此无法读取包含空格的整行内容。要读入整行文本,应当使用getline函数。它可以一直读取到换行符前所有字符,适合处理用户输入的一行句子或带空格的数据。

一、std::getline读取整行到string
最常用的方式是全局函数std::getline,它从输入流读取字符存入string对象,遇到换行符停止并丢弃换行符。
#include <iostream>
#include <string>
using namespace std;
int main() {
string line;
cout << "请输入一行文字:" << endl;
// 从标准输入读取整行,存入line
getline(cin, line);
cout << "你输入的是:" << line << endl;
return 0;
}
二、cin.getline成员函数
istream类提供了成员函数getline,用于读取字符数组。它需要指定缓冲区大小和可选终止符。
#include <iostream>
using namespace std;
int main() {
char buf[100];
cout << "请输入一行文字:" << endl;
// 从cin读取最多99个字符到buf,遇到换行停止
cin.getline(buf, 100);
cout << "你输入的是:" << buf << endl;
return 0;
}
三、cin与getline混用的坑
当先用cin读取数字或单词,再用getline读整行时,cin会留下换行符,导致getline立即读到空行。解决方法是调用cin.ignore()丢弃残留换行。
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
string line;
cin >> n;
// 忽略输入n后留下的换行符
cin.ignore();
getline(cin, line);
cout << n << " " << line << endl;
return 0;
}
四、两种getline对比
| 形式 | 目标类型 | 是否自动管理空间 |
|---|---|---|
| std::getline(cin, str) | string | 是 |
| cin.getline(buf, size) | char数组 | 否 |
日常开发中推荐优先使用std::getline配合string,更安全且不易溢出。掌握这些用法后,C++读入整行的问题就能轻松应对。