文件I / O操作 - 奇怪的字符输入?

时间:2013-09-04 12:06:49

标签: c++ file-io fstream c-strings

我正在使用以下程序中的str.erase()函数来擦除输出的某些部分。但最后我得到了一个奇怪的输出,如����

我的文件内容为Current name of the file = ABCD-1234

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
//std::ifstream;

int main ()
{
  string line;
  ifstream myfile ("/home/highlander141/NetBeansProjects/erase_remove/dist/Debug/GNU-Linux-x86/abc.txt");
  if (myfile.is_open())
  {
    while ( !myfile.eof() ) //myfile.good()
    {
      getline (myfile,line);
        //line = myfile.get();
        //if(!myfile.eof())
      cout << line <<endl;
      std::string str (line); 
      str.erase (str.begin()+0, str.end()-9);
      std::cout << str << endl;

    }
      myfile.close();
      //remove("/home/highlander141/NetBeansProjects/erase_remove/dist/Debug/GNU-Linux-x86/abc.txt");
  }

  else cout << "Unable to open file"; 

return 0;
}

我的程序输出

Current name of the file = ABCD-1234
ABCD-1234

����

RUN FINISHED; exit value 0; real time: 10ms; user: 0ms; system: 0ms

1 个答案:

答案 0 :(得分:2)

在阅读输入之前,您正在检查eof()。修改循环如下:

while ( 1 )
{
    getline (myfile,line);
    if ( myfile.eof() )
        break;

    // Rest of the loop
}