0

我无法弄清楚我的简单 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:

如您所见,最后一行是问题所在;知道如何解决这个问题吗?

4

1 回答 1

1

问题可能是您在 之前阅读的最后一件事std::getline()是整数(或使用operator>>(). 的其他内容。格式化的输入运算符在遇到与其格式不匹配的第一个字符时停止读取。例如,对于整数读取停止 monent a non -digit 被输入(除了一个前导符号)因此,在读取一个整数之后,用于指示输入完成的换行符仍然在输入缓冲区中。

要处理卡住的换行符,您可以在 calking 之前跳过任何前导空格std::getline()

if (std::getline(std::cin >> std::ws, name)) {
    ...
}

顺便说一句,永远不会出现您不想检查用户输入的情况!用户输入总是需要检查,即使在输入被认为是正确的最简单的程序中也是如此!它有助于显着定位实际问题。鉴于您的输出,它看起来好像 tve 输入实际上与正在读取的内容不匹配......

于 2012-11-10T22:13:27.083 回答