-4

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";
   }

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

谢谢你。

4

2 回答 2

1

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

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

于 2013-10-06T18:53:09.437 回答
0

您不能读入字符串文字,即

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

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

由于您在跳出循环之前只读取了一组输入,所以我想我会检查是否没有发生故障,因为此时不需要到达文件末尾,即我会使用

if (in) {
    ...
}

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

if ((in >> std::ws).eof()) {
    ...
}
于 2013-10-06T18:58:32.247 回答