.eof()在turbo c ++中不起作用

时间:2013-10-06 18:48:24

标签: c++

myfile.eof()无效turbo c++。 这是我的片段:

    while(viofile  >> vio.studnumb >> vio.firstname >> vio.lastname >> vio.code >> vio.remarks >> vio.date >> '/`enter code here`' >> vio.month >> '/'>>vio.year >> "Noted by:" >> vio.filler >> vio.position >> vio.user)
   {
       if(vio.studnumb==studno)
       {
            cout << endl << studno << ' ' << vio.firstname << ' ' << vio.lastname << ' '<< endl;
            cout << "Violation :" << vio.code << ' ' << vio.remarks << ' ' << vio.date << '/' << vio.month<< '/' << vio.year <<endl;
            cout << "   Noted by: " << vio.positio`enter code here`n << ' ';
            cout <<vio.user;
    break;
   }
   else if(viofile.eof())
    cout << "You have no violation.\n";
   }

我有一个项目要完成。请回复。

谢谢你。

2 个答案:

答案 0 :(得分:1)

如果对operator>>的任何调用到达文件末尾,将设置eofbit,并且流将在布尔上下文中转换为false。此时程序将退出循环。如果执行进入循环,则(bool)viofile仍然为真,因此viofile.eof()不可能返回true。

使用布尔标志 - 在循环之前将其设置为false,在打印违规时将其设置为true。在循环之后,如果仍然没有设置此标志,那么您没有打印和违规,您可以相应地报告。

答案 1 :(得分:0)

您无法读入字符串文字,即

std::cin >> "<some string>"

是非法的。如果需要解码相应的字符串,则需要创建合适的解析例程。

由于你在断开循环之前只读了一组输入,我猜我会检查没有发生故障,因为没有必要到达文件末尾,即,我会用

if (in) {
    ...
}

鉴于输入通常在遇到空格字符(例如换行符)时停止,您至少需要跳过空格,以希望到达文件的末尾:

if ((in >> std::ws).eof()) {
    ...
}