程序编译和运行,但不工作?

时间:2014-03-09 23:15:26

标签: c++

我在使用此代码时遇到了一些问题,得到了一些帮助,并且工作正常。继续做一些调整,现在程序编译并运行,但它没有做它应该做的事情(接收c ++文件,删除注释,并打印出一个新文件)。它没有打印出一个新文件...任何想法我搞砸了什么?

#include <iostream>
#include <fstream>
#include <string>
#include <cassert>
#include <cstdio>

using namespace std;

void remove_comments (ifstream& , ofstream&);

int main(void)
{
  int i;
  string inputFileName;
  string outputFileName;
  string s;
  ifstream fileIn;
  ofstream fileOut;
  char ch;

  do
  {
    cout<<"Enter the input file name:";
    cin>>inputFileName;
  }
  while (fileIn.fail() );
  cout<<"Enter the output file name: ";
  cin>>outputFileName;

  fileIn.open(inputFileName.data());
  assert(fileIn.is_open() );
  remove_comments ( fileIn , fileOut);         

  fileIn.close();
  fileOut.close();

  return 0;
}


void remove_comments( ifstream& fileIn , ofstream& fileOut)
{
  string line;
  bool flag = false;

  while (! fileIn.eof() )
  {

    getline(fileIn, line);

    if (line.find("/*") < line.length() )
      flag = true;
    if (! flag)
    {
      for (int i=0; i < line.length(); i++)
      {

        if(i<line.length())
          if ((line.at(i) == '/') && (line.at(i + 1) == '/'))
          break;
          else
            fileOut << line[i];
      }
      fileOut<<endl;


  }
  if(flag)
  {
    if(line.find("*/") < line.length() )
      flag = false;
  }

}
}

2 个答案:

答案 0 :(得分:0)

您忘记使用std::ofstream::open打开输出流文件:

fileOut.open(outputFileName);

还注意std::ifstream has an overload for open通过常量引用获取std::string,所以:

fileIn.open(inputFileName.data());

可以成为:

 fileIn.open(inputFileName);

答案 1 :(得分:0)

为什么不从命令行获取参数?

这将非常简单。

void remove_comments (ifstream& , ofstream&);

int main(int argc, char** argv)
{
  if(argc!=3){
    cerr<<"usage: "<<argv[0]<<" input.file output.file\n";
    return -1;
  }
  int i;
  string inputFileName=argv[1];
  string outputFileName=argv[2];
  string s;
  ifstream fileIn(inputFileName.c_str());
  if(!fileIn.is_open()){
     cerr<<"error opening input file\n";
     return -1; 
  }
  ofstream fileOut(outputFileName.c_str());
  if(!fileOut.is_open()){
     cerr<<"error opening Output file\n";
     return -1; 
  }
  remove_comments ( fileIn , fileOut);       

  return 0;
}