You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++程序中getline函数跳过用户输入的问题求助

C++程序输入跳过问题的原因及解决方法

问题原因

使用cin >> age读取整数时,输入完成后按下的回车键会留下一个换行符\n在输入缓冲区中。后续调用getline(cin, name)时,getline会将这个残留的换行符视为输入结束,直接读取到空字符串,导致姓名输入被跳过。

解决方法

方法一:清除输入缓冲区的残留换行符

在每次使用cin读取整数后,调用cin.ignore()忽略缓冲区中直到换行符的所有字符。需要包含<limits>头文件来使用numeric_limits。

修改后的代码示例:

#include <iostream>
#include <limits>
using namespace std;
int main(){
    string name1, name2, name3, n1, n2, n3;
    int age1, age2, age3;

    cout << "Who Is The First Student?"<< endl;
    getline(cin, name1);
    cout << "What is " << name1<< "'s Age?"<< endl;
    cin >> age1;
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清除缓冲区的换行符

    cout << "Who Is The Second Student?"<< endl;
    getline(cin, name2);
    cout << "What is " << name2<< "'s Age?"<< endl;
    cin >> age2;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    cout << "Who Is The Third Student?"<< endl;
    getline(cin, name3);
    cout << "What is " << name3<< "'s Age?"<< endl;
    cin >> age3;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    n1 = name1.substr(2, name1.size() -3);
    n2 = name2.substr(2, name2.size() -3);
    n3 = name3.substr(2, name3.size()-3);

    cout << "Name             Age             Modified"<<endl;
    cout << name1<< "             "<<age1<<"             "<<n1<<endl;
    cout << name2<< "             "<<age2<<"             "<<n2<<endl;
    cout << name3<< "             "<<age3<<"             "<<n3<<endl;
    return 0;
}

方法二:统一使用getline读取所有输入

不再混合使用cin和getline,而是用getline读取年龄的字符串,再通过stoi()转换为整数。这种方法避免了缓冲区残留问题,逻辑更统一。

修改后的代码示例:

#include <iostream>
using namespace std;
int main(){
    string name1, name2, name3, n1, n2, n3;
    int age1, age2, age3;
    string age_str;

    cout << "Who Is The First Student?"<< endl;
    getline(cin, name1);
    cout << "What is " << name1<< "'s Age?"<< endl;
    getline(cin, age_str);
    age1 = stoi(age_str);

    cout << "Who Is The Second Student?"<< endl;
    getline(cin, name2);
    cout << "What is " << name2<< "'s Age?"<< endl;
    getline(cin, age_str);
    age2 = stoi(age_str);

    cout << "Who Is The Third Student?"<< endl;
    getline(cin, name3);
    cout << "What is " << name3<< "'s Age?"<< endl;
    getline(cin, age_str);
    age3 = stoi(age_str);

    n1 = name1.substr(2, name1.size() -3);
    n2 = name2.substr(2, name2.size() -3);
    n3 = name3.substr(2, name3.size()-3);

    cout << "Name             Age             Modified"<<endl;
    cout << name1<< "             "<<age1<<"             "<<n1<<endl;
    cout << name2<< "             "<<age2<<"             "<<n2<<endl;
    cout << name3<< "             "<<age3<<"             "<<n3<<endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者jack is carbon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:07:28