C ++:使用文件结尾(ctrl + z)结束循环似乎打破了我的程序的其余部分的cin

时间:2018-04-23 22:31:10

标签: c++ while-loop eof

程序的其余部分仍在运行,但没有任何一个提示用户输入。

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

就我的目的而言,这就是我所需要的。

1 个答案:

答案 0 :(得分:0)

ctrl+z实际上是0x1A字节,它将std::basic_ios::eof设置为true,这意味着关联的流已到达文件结尾。

Windows system can not read beyond the 0x1A (EOF) character but Unix can.