繁体   English   中英

我正在读取文件,但是在读取时,还要读取最后一个字符吗?

[英]I am reading file but while reading,it is reading last character one time extra?

我正在尝试通过以下代码读取文件

void main()
{ 
   int i=0;
   ifstream fout1 ("Aj.txt",ios::binary);
   if (fout1.is_open())
   {
      while(fout1)
      {
         i++;
         fout1.get(ch1);
         cout<<ch1;
      }
      cout<<i;
      fout1.close();
    }
    else
    { 
       cout << "Unable to open file";
    }
    return 0;
 }

在这里,这段代码读取了整个文件,但是它又进入循环了一次,也就是说,如果文件中有4个字符,那么循环执行将循环5次。如何更正或克服它。

该代码读取直到eof标志设置,但eof标志未设置直到读实际上失败。 这意味着当fout1.get(ch1)读取最后一个字符时, 尚未设置eof 因此它显示并检查仍然良好的fout ,因此重新进入循环。 然后,由于eof fout1.get(ch1)失败,并且再次显示ch1的先前值。 编写该循环的正确方法是:

while(fout1.get(ch1)) {  //false when it can't read any more characters
    i++;
    cout<<ch1;
}
cout<<i;
fout1.close();

读取第4个字符后,流仍然处于良好状态,因此它尝试读取第5个字符,并且此时遇到文件末尾。 您应该在调用get之后检查流状态。 例如:

while( fout1.get(ch1) )
{
    cout << ch1;
    ++i;
}

如果您不熟悉iostream,这是一个容易犯的错误。 如果您仅读取文件中的最后一个字符, stream.eof()将为false 只有当你尝试读取过去的文件的末尾为真。 您需要一个如下所示的内部循环:

for (;;)
{
    fout1.get(ch1);
    if (!fout1) break;
    cout << ch1;
    i++;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM