C++中cin.get读取首个输入后无法接收后续输入的问题
解决cin.get无法连续读取输入的问题
问题原因
使用cin.get(char*, n)读取字符串时,用户输入内容后按下的换行符会留在输入缓冲区中。后续调用cin.get时,会直接读取到这个换行符并判定输入结束,因此无法接收新的用户输入。
另外需要注意:cin.get(char*, n)最多读取n-1个字符,之后自动添加字符串终止符'\0'。你的代码中参数设为3,正好可以读取前两个字符,这部分逻辑是正确的。
解决方案1:清除输入缓冲区的换行符
每次调用cin.get后,用cin.ignore()跳过输入缓冲区中的换行符,确保下一次cin.get能正常接收用户输入。
修正后的代码:
#include <iostream> #include <cstring> using namespace std; int main() { char or1[99], or2[99], or3[99]; cout << "Enter array: "; cin.get(or1, 3); cin.ignore(); // 跳过换行符 cout << "Enter array: "; cin.get(or2, 3); cin.ignore(); cout << "Enter array: "; cin.get(or3, 3); cin.ignore(); cout << "\n--" << or1 << or2 << or3 << "--\n"; }
解决方案2:改用cin>>读取
cin>>会自动跳过空白字符(包括换行符),无需手动处理缓冲区。读取后手动截断字符串,只保留前两个字符即可:
#include <iostream> #include <cstring> using namespace std; int main() { char or1[99], or2[99], or3[99]; cout << "Enter array: "; cin >> or1; // 截断为前两个字符 if(strlen(or1) >= 2) { or1[2] = '\0'; } cout << "Enter array: "; cin >> or2; if(strlen(or2) >= 2) { or2[2] = '\0'; } cout << "Enter array: "; cin >> or3; if(strlen(or3) >= 2) { or3[2] = '\0'; } cout << "\n--" << or1 << or2 << or3 << "--\n"; }
测试时输入Dog、Cat、Rabbit,两种方案都会输出--DoCaRa--,符合需求。
内容的提问来源于stack exchange,提问作者Joaquín Augusto Giménez
相关产品推荐
相关产品推荐

