C ++ getline(),这个函数的第二次运行不起作用

时间:2012-11-10 21:50:06

标签: c++ input getline

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

如你所见,最后一行是问题; 任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题可能是你在std::getline()之前读到的最后一件事是整数(或其他使用operator>>()的东西。格式化的输入操作符在遇到与其格式不匹配的第一个字符时停止读取例如,对于整数读取停止monent输入一个非数字(除了前导符号)。因此,在读取整数后,用于指示输入完成的换行符仍然在输入缓冲区中。 / p>

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

if (std::getline(std::cin >> std::ws, name)) {
    ...
}
顺便说一下,从不这种情况你不想检查用户输入!用户输入始终需要检查,即使在输入假设正确的最简单的程序中也是如此!它有助于显着定位实际问题。鉴于您的输出,看起来好像tve输入实际上与正在读取的内容不匹配...