cin >> 读不到空格后部分是因为它以空白符为分隔符,遇空格即停止;整行读应使用getline(),注意处理cin >> 留下的换行符,可用cin.ignore()清除。
为什么 cin >> 读不到空格后的部分
因为 cin >> 默认以空白符(空格、制表符、换行)为分隔,遇到第一个空格就停止提取。比如输入 "Hello World",cin >> str 只得到 "Hello","World" 留在输入缓冲区里,后续读取可能出错。
这不是 bug,是设计行为 —— 它专为读取单个词设计。要整行读,必须换方法。
getline() 的正确调用方式和参数含义
getline() 是 提供的函数,原型是:std::getline(std::istream&, std::string&, char)。最常用的是前两个参数版本,第三个是可选的分隔符(默认是 '\n')。
关键点:
立即学习“C++免费学习笔记(深入)”;
- 必须传入
std::cin(或其它istream对象),不能只写getline(str) - 第二个参数是
std::string引用,不是char[];用 C 风格数组请改用cin.getline() - 如果之前用过
cin >>,缓冲区里可能残留'\n',直接跟getline()会导致它立刻读到空行 —— 此时需先调用cin.ignore()
示例: