在Visual Studio 2022的C++中如何用cin读取换行作为输入
解决cin读取字符串时捕获换行/空输入的问题
首先明确:cin >> string 的默认行为是跳过所有前置空白字符(包括换行、空格、制表符),只读取到下一个空白字符为止,所以单纯输入换行时它会一直等待有效字符。要实现捕获换行或把空输入存入字符串,可采用以下几种方法:
方法一:使用getline读取整行(含空行)
getline(cin, str) 会读取从当前位置到换行符的所有内容(包括空行),且会将换行符从输入流中移除(不存入字符串)。若要把换行符本身存入字符串,可手动追加:
#include <iostream> #include <string> using namespace std; int main() { string str; // 读取整行,包含空行 getline(cin, str); // 若为空行(仅输入换行),将换行符存入字符串 if (str.empty()) { str = "\n"; } // 验证结果 cout << "读取到的内容:[" << str << "]" << endl; return 0; }
此方法能直接处理所有行输入,空行场景下可按需将\n存入字符串。
方法二:修改cin输入格式,不跳过空白字符
通过noskipws操纵符关闭cin跳过空白的默认行为,即可读取到换行符,适合需要精确控制每个输入字符的场景:
#include <iostream> #include <string> using namespace std; int main() { string str; char c; // 关闭跳过空白的默认行为 cin >> noskipws; // 读取第一个字符(含换行) cin >> c; if (c == '\n') { str = "\n"; } else { // 读取后续字符直到换行 str += c; while (cin >> c && c != '\n') { str += c; } } // 恢复默认的跳过空白行为(避免影响后续输入) cin >> skipws; cout << "读取到的内容:[" << str << "]" << endl; return 0; }
方法三:将空输入转为"null"字符串
若需求是把纯换行输入转为"null"字符串,用getline即可快速实现:
#include <iostream> #include <string> using namespace std; int main() { string str; getline(cin, str); // 空行时赋值为"null" if (str.empty()) { str = "null"; } cout << "读取到的内容:[" << str << "]" << endl; return 0; }
内容的提问来源于stack exchange,提问作者Ill Magnus
相关产品推荐
相关产品推荐

