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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:15:44