我在使用此代码时遇到了一些问题,得到了一些帮助,并且工作正常。继续做一些调整,现在程序编译并运行,但它没有做它应该做的事情(接收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;
}
}
}
答案 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;
}