如何解决C++中cin读取输入引发循环意外重复执行的问题
问题原因
cin >> choice读取字符串时默认以空白字符(空格、换行符、制表符等)作为分隔符,每次只会读取到第一个空白符前的内容,剩余未读取的内容会保留在输入缓冲区中。- 输入
hi hi并按下回车时,输入缓冲区内容为hi hi\n:- 第一次循环读取到第一个
hi,匹配条件输出Whats up?,缓冲区剩余hi\n - 第二次循环运行时,
cin >> choice会自动跳过开头的空格,读取到第二个hi,再次匹配条件输出Whats up?,缓冲区剩余\n - 第三次循环时缓冲区无有效输入内容,才会等待新的用户输入,因此出现两次重复输出的现象。
- 第一次循环读取到第一个
解决方法
如果需要每次读取用户输入的一整行内容作为判断依据,将读取逻辑替换为getline即可,修改后的代码参考:
while (true) { string choice; cout << ">>> "; // 读取整行输入,不会按空格分割内容 getline(cin, choice); if (choice == "hi") { cout << "Whats up?" << endl; } else { cout << "error" << endl; } }
修改后输入hi hi会被判定为完整字符串"hi hi",不符合匹配条件,直接输出error,不会出现重复执行的问题。
内容的提问来源于stack exchange,提问作者ceoverflow
相关产品推荐
相关产品推荐

