程序的其余部分仍在运行,但没有任何一个提示用户输入。
double sales;
cout << "(Commision Employee) Please enter the employee's Sales: ";
while (cin >> sales) {
try
{
employee1.setGrossSales(sales);
}
catch (invalid_argument& e)
{
cout << "\nException: " << e.what() << "\n\n";
}
cout << "Please re-enter value if an error occured, otherwise enter end-of-file (ctrl+z): ";
}
string ssn;
cout << "(Base Plus Commision Employee) Please enter the SSN with dashes: ";
cin >> ssn;
employee2.setSocialSecurityNumber(ssn);
循环之后的cin并不像我预期的那样起作用。我收集的是cin有一个布尔文件结束标记,在接收到文件结尾(Windows上的ctrl + z)时切换为true。它是阻止cin再次操作的标记。我发现我可以使用std :: cin.clear();清除这个标记。
我在这里找到了这个答案,它在描述我遇到的同样问题并回答它时做得更好:while (cin >> x) and end-of-file issues
就我的目的而言,这就是我所需要的。
答案 0 :(得分:0)
ctrl+z
实际上是0x1A
字节,它将std::basic_ios::eof
设置为true
,这意味着关联的流已到达文件结尾。
Windows system can not read beyond the 0x1A (EOF) character but Unix can.