VS Code中C++程序无法获取多个输入的问题求助
VS Code中C++程序无法获取多个输入的问题求助
嗨,我懂你现在遇到的麻烦了——你的代码只能成功读取年龄输入,名字那部分总是拿不到内容,哪怕调换输入顺序也只能拿到一个输入,对吧?
先来看你贴出的代码:
#include <iostream> using namespace std; int main() { int age; string name; cout << "Enter your age: "; cin >> age; cout << "You are "<<age<<" years old"<<endl; cout << "Enter your name: "<<endl; getline(cin,name); cout<<"Hello, "<<name; return 0; }
问题根源在输入缓冲区残留的换行符上:当你用cin >> age输入年龄后,按下回车键确认,这个回车键对应的换行符(\n)会留在输入缓冲区里。接下来调用getline(cin, name)时,getline会从缓冲区读取内容直到遇到换行符,它会直接把这个残留的换行符当成输入结束信号,所以name变量就被赋值成了空字符串,看起来像是没拿到输入。
给你两个实用的解决方法:
方法一:在
cin >> age之后,用cin.ignore()忽略缓冲区里的换行符
修正后的代码如下:#include <iostream> using namespace std; int main() { int age; string name; cout << "Enter your age: "; cin >> age; cin.ignore(); // 忽略输入年龄后残留的换行符 cout << "You are "<<age<<" years old"<<endl; cout << "Enter your name: "<<endl; getline(cin,name); cout<<"Hello, "<<name; return 0; }方法二:统一用
getline读取所有输入,再把年龄的字符串转换成整数
这种方法可以彻底避免混合使用cin >>和getline带来的缓冲区问题:#include <iostream> #include <string> #include <sstream> using namespace std; int main() { int age; string age_str, name; cout << "Enter your age: "; getline(cin, age_str); // 将字符串转换成整数 stringstream(age_str) >> age; cout << "You are "<<age<<" years old"<<endl; cout << "Enter your name: "<<endl; getline(cin,name); cout<<"Hello, "<<name; return 0; }
你可以试试这两种方法,应该就能正常获取两个输入啦~
备注:内容来源于stack exchange,提问作者DreadMermaid
相关产品推荐
相关产品推荐

