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

C++中如何循环使用getline函数?调用被跳过该如何解决?

问题原因

  • 核心是输入缓冲区残留换行符导致的:cin >> age 只会读取输入的整数内容,不会处理输入完成后按下回车对应的\n字符,这个换行符会一直留在输入缓冲区中。
  • 下一轮循环执行getline(cin, name)时,getline默认遇到\n就停止读取,直接把缓冲区里残留的\n当成输入结束标识,因此会读取到空字符串,看起来就像跳过了这行代码。

解决方法

在cin >> age执行完成后,手动清空输入缓冲区中残留的所有字符直到遇到换行符为止,具体修改如下:
首先需要新增引入<limits>头文件,用于获取输入缓冲区的最大长度:

#include <iostream>
#include <string>
#include <limits> // 新增头文件
using namespace std;

int main()
{
    string name;
    int age;

    while(true)
    {
        cout << "Enter your name: ";
        getline(cin, name);
        cout << "Enter your age: ";
        cin >> age;

        cout << "Age: " << age << "\tName: " << name << "\n\n";
        // 新增:清空输入缓冲区残留的换行符
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
}

如果你的使用场景可以确定缓冲区只会残留一个换行符,也可以简化为cin.ignore();,上面的写法兼容性更强,能处理输入年龄时多输入了其他多余字符的场景。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:05