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";
}
我有一个项目要完成。请回复。
谢谢你。答案 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()) {
...
}