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

C++链表员工管理系统输入死循环及数据显示异常问题咨询

C++员工管理系统问题修复方案

问题1:输入员工全名时程序陷入死循环

错误原因

执行cin>>choice读取菜单选项后,输入缓冲区会残留一个换行符,后续调用getline(cin,name)时会直接读取到这个换行符,得到空字符串。如果此时输入带空格的全名,内容会被后续的cin>>id接收,而id是int类型,字符串无法匹配int类型会导致cin进入fail状态,后续所有输入操作都失效,程序进入死循环。

修复方案

每次执行cin>>读取数值类型后,清空输入缓冲区残留的换行符:

  1. 在cin>>choice后添加一行忽略残留字符的代码:
cin>>choice;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 新增这行,清空到换行符为止的所有残留内容
  1. 提前引入头文件<limits>才能使用numeric_limits。

问题2:查询、显示员工信息输出随机乱码

错误原因

Employee类的构造函数、所有属性setter方法的赋值逻辑完全写反:将成员变量的值赋值给了参数,而不是把参数的值赋值给成员变量,导致所有员工属性都没有被正确赋值,读取的是内存里的随机垃圾值,所以输出乱码。

修复方案

修正Employee类的构造函数和setter的赋值顺序:

// 修正后的构造函数
Employee (string n, int id, double s){
    name = n; // 原代码写反为n = name
    ID = id; // 原代码写反为id = ID
    Salary = s; // 原代码写反为s = Salary
    this->next = NULL;
}

// 修正后的setters
void setName(string n){
    name = n; // 原代码写反为n = name
}
void setID(int id){
    ID = id; // 原代码写反为id = ID
}
void setSalary(double s){
    Salary = s; // 原代码写反为s = Salary
}

修正后所有员工属性就可以正常赋值、读取,不会再输出乱码。

额外优化建议

当前代码直接引入cpp文件的写法不符合C++工程规范,建议把类定义放到.h头文件,类实现放到独立的.cpp文件,编译时链接所有cpp文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:03