C++如何读取包含空格的字符串输入,解决带空格操作名匹配失效问题
问题原因
cin 默认以空格、制表符、换行符作为输入分隔符,你输入 Value Check 时,cin >> user_command 只会读取到第一个空格前的 Value 存入变量,剩余的 Check 留在输入缓冲区,自然无法和带空格的字符串匹配成功。
解决方案
使用 getline() 函数读取整行输入,该函数会读取一行内包含空格的所有字符,直到遇到换行符为止。
代码修改示例
#include <iostream> #include <string> // 如果需要清空之前的残留换行符,还需要引入<limits>头文件 // #include <limits> using namespace std; // ...其他代码... string user_command; cout << "Enter the operation: "; // 注意:如果这行代码之前有过 cin >> 其他变量的操作,输入流会残留一个换行符 // 需要先调用以下代码清空缓冲区,否则getline会读到空内容 // cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, user_command); if (user_command == "Value Check"){ valueCheck(); } // ...其他代码...
额外优化建议
如果需要兼容用户输入前后多打空格的场景,可以额外实现一个去除字符串首尾空白字符的trim函数,对读取到的user_command做预处理后再做匹配。
内容的提问来源于stack exchange,提问作者Sri Govind
相关产品推荐
相关产品推荐

