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

我的C++程序未接收输入就终止,该如何排查解决?

解决C++程序未接收输入就终止的问题

嘿,我一眼就找到问题的根源了——你读取用户名的代码存在严重错误,导致程序触发了未定义行为,直接跳过年龄输入就终止了。

修复后的代码(针对char数组的修正)

#include <iostream>
#include <string>
using namespace std;
class user{
    int id,level=1,kills=0,age;
    char name[20],server[40];
public:
    void get(){
        cout<<"Enter your name:";
        cin>>name;  // 关键修改:直接使用数组名,而非name[20]
        cout<<"Enter your age:";
        cin>>age;
    }
};
int main(){
    user u;
    u.get();
    return 0;
}

错误原因详解

你原来的代码里写了cin>>name[20];,这犯了两个致命错误:

  1. 数组越界访问:name是一个长度为20的char数组,合法索引范围是0~19,name[20]已经超出了数组的内存边界,属于未定义行为。这种操作可能会破坏栈上的其他变量(比如age的内存空间),或者直接搞乱输入流cin的状态。
  2. 错误的读取方式:要读取字符串到char数组中,你应该直接传递数组名name——数组名在表达式中会自动转换为指向数组第一个元素的指针,cin会自动把输入的字符串存储到数组里(注意输入的名字长度不要超过19,因为需要留一个位置存放字符串结束符'\0')。

更安全的替代方案:使用std::string

如果你想彻底避免数组越界这类问题,推荐直接用C++的std::string来代替char数组,它会自动管理内存,使用起来更安全方便:

#include <iostream>
#include <string>
using namespace std;
class user{
    int id,level=1,kills=0,age;
    string name, server;  // 用string替换char数组
public:
    void get(){
        cout<<"Enter your name:";
        cin>>name;
        cout<<"Enter your age:";
        cin>>age;
    }
};
int main(){
    user u;
    u.get();
    return 0;
}

这样修改后,程序就能正常接收用户名和年龄的输入了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:38:45