使用getline读取整行字符串,可包含空格;混用cin时需用ignore清除换行符残留,避免getline跳过输入。

在C++中,使用cin读取带空格的整行字符串时,直接用cin >> string是不行的,因为它遇到空格、制表符或换行符就会停止。要读取一整行包含空格的内容,需要使用std::getline函数。
使用 std::getline 读取整行
核心方法:用 std::getline(std::cin, str) 来读取一整行,包括中间的空格,直到遇到换行符为止。
示例代码:
#include iostream>
#include
using namespace std;
int main() {
string input;
cout
getline(cin, input);
cout
return 0;
}
这样即使输入Hello World C++,也能完整读取。
立即学习“C++免费学习笔记(深入)”;
注意混合使用 cin 和 getline 的问题
如果先用cin >>读取数据,再用getline读行,可能会出现getline“跳过”输入的问题。这是因为cin >>不会读走换行符,而getline会立即读到这个残留的换行符并认为是一行结束。
解决方法:在切换前清空缓冲区中的换行符。
示例:
int age;
string name;
cout
cin >> age;
cin.ignore(); // 忽略掉换行符
cout
getline(cin, name);
cin.ignore() 会跳过一个字符(通常是换行符),也可以写成 cin.ignore(1000, '\n') 来忽略最多1000个字符直到遇到换行符,更安全。
其他技巧和注意事项
- 如果输入行特别长,确保使用
std::string而不是字符数组,避免溢出。 -
getline可以指定分隔符,例如getline(cin, str, '.')表示读到句号才结束。 - 读取失败时(如流状态错误),
getline返回false,可用于判断是否读取成功。
基本上就这些。只要记住:读整行用getline,混用cin时记得清理缓冲区,就能避免大部分问题。










