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

C++程序中getline函数未按预期工作的技术咨询

问题分析与解决

问题根源

使用cin >> choice读取整数时,输入结束后按下的回车键(换行符\n)会残留在输入缓冲区中。后续调用getline(cin, name)时,getline会将这个残留的换行符视为一个空行,直接完成第一次读取,随后程序立刻执行到密码提示语句,导致两个提示挤在同一行,且用户名输入被跳过。

解决方案

在循环结束后、调用getline之前,清空输入缓冲区中残留的换行符。可以使用cin.ignore()方法,为了确保完全清除到换行符,建议使用:

cin.ignore(numeric_limits<streamsize>::max(), '\n');

使用此方法需要包含<limits>头文件。

修正后的代码

#include <iostream>
#include <string>
#include <limits> // 必须包含此头文件

using namespace std;

int main() {
    int choice;
    while(choice != 2){
        cin >> choice;
    }
    // 清除输入缓冲区中的残留换行符
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    
    string name;
    string pass;
    cout << "Username: ";
    getline(cin, name);
    cout << "Password: ";
    getline(cin, pass);
    
    // 可选:验证输入内容
    cout << "\n输入的用户名:" << name << endl;
    cout << "输入的密码:" << pass << endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者Adnan Ullah Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:15:41