我不知道我的简单 IO 问题是什么:
这是我执行 IO 的代码:
cout << "Enter an Employee name: ";
getline(cin, empName);
cout << "Employee Position: " ;
cin >> empPos;
cout << "Enter the Number of Years of Experience: ";
cin >> numOfExp;
cout << "Enter the deprtment Number: ";
cin >> deptNum;
这是我的错误输出: 第一次读取名称时一切正常,但第二次似乎自动将某些内容传递到名称中,而不要求用户输入名称的任何内容。
这是我的输出:
Name: Unknown
Department Number: 0
Employee Position: E
Years of Experience: 0
Salary: 0
Total Number of Employees: 1
Enter an Employee name: arasd d
Employee Position: s
Enter the Number of Years of Experience: 12
Enter the deprtment Number: 12
Name: arasd d
Department Number: 12
Employee Position: s
Years of Experience: 12
Salary: 0
Total Number of Employees: 1
Enter an Employee name: Employee Position:
如您所见,最后一行是问题所在; 知道如何解决这个问题吗?
最佳答案
问题可能是你在 std::getline()
之前读到的最后一个东西是一个整数(或者使用 operator>>()
的其他东西)。格式化输入运算符在遇到第一个与其格式不匹配的字符时停止读取。例如,整数读取在输入非数字(前导符号除外)时停止。因此,在读取整数后使用换行符指示输入完成仍在输入缓冲区中。
要处理卡住的换行符,您可以在插入 std::getline()
之前跳过任何前导空格:
if (std::getline(std::cin >> std::ws, name)) {
...
}
顺便说一句,从来没有您不想检查用户输入的情况!用户输入总是需要检查,即使是在假设输入是正确的最普通的程序中也是如此!它有助于显着定位实际问题。鉴于您的输出,看起来 tve 输入实际上与正在读取的内容不匹配......
关于C++ getline(), 第二次运行这个函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13326408/