C++结构体存储员工信息时输入异常问题求助
问题分析与解决方案
嘿,我一眼就发现你的程序为啥没法输入剩余数据了——问题出在你结构体里的firstName和lastName的类型定义上!
你现在用的是char firstName; char lastName;,但char类型只能存储单个字符。当你输入一个完整的名字(比如"Alice")时,第一个字符'A'会被存在firstName里,剩下的"lice"会直接被塞进后面的lastName、employeeID这些变量里,程序误以为已经完成了所有输入,自然就直接结束了。
修复方案
你有两种常见的修复方式:
方式1:使用C++的string类型(推荐)
这是最简洁安全的方式,需要额外包含<string>头文件:
#include <iostream> #include <iomanip> #include <string> // 新增头文件 using namespace std; struct Employee { int employeeID; string firstName; // 替换char为string string lastName; // 替换char为string float payRate; int hours; }; int main() { Employee emp; cout << "输入员工ID: "; cin >> emp.employeeID; cout << "输入员工名字: "; cin >> emp.firstName; cout << "输入员工姓氏: "; cin >> emp.lastName; cout << "输入时薪: "; cin >> emp.payRate; cout << "输入工作时长: "; cin >> emp.hours; // 输出验证 cout << "\n员工信息:\n"; cout << "ID: " << emp.employeeID << endl; cout << "姓名: " << emp.firstName << " " << emp.lastName << endl; cout << "时薪: " << fixed << setprecision(2) << emp.payRate << endl; cout << "工作时长: " << emp.hours << endl; return 0; }
方式2:使用字符数组
如果你更习惯C风格的字符存储,可以用固定长度的char数组:
#include <iostream> #include <iomanip> using namespace std; struct Employee { int employeeID; char firstName[50]; // 定义能存50个字符的数组 char lastName[50]; // 同理 float payRate; int hours; }; int main() { Employee emp; cout << "输入员工ID: "; cin >> emp.employeeID; cout << "输入员工名字: "; cin >> emp.firstName; cout << "输入员工姓氏: "; cin >> emp.lastName; cout << "输入时薪: "; cin >> emp.payRate; cout << "输入工作时长: "; cin >> emp.hours; // 输出验证 cout << "\n员工信息:\n"; cout << "ID: " << emp.employeeID << endl; cout << "姓名: " << emp.firstName << " " << emp.lastName << endl; cout << "时薪: " << fixed << setprecision(2) << emp.payRate << endl; cout << "工作时长: " << emp.hours << endl; return 0; }
额外提示
- 用
cin输入string或字符数组时,会自动以空格作为分隔符,所以如果名字里有空格(比如"Mary Ann"),这种方式会只读取到第一个空格前的部分。如果需要支持带空格的名字,你可以用getline(cin, emp.firstName),但要注意处理cin留下的换行符(可以在cin >> emp.employeeID后加cin.ignore()跳过换行)。
内容的提问来源于stack exchange,提问作者E.Mules
相关产品推荐
相关产品推荐

