我有以下代码的错误,我不确定我做错了什么。我的编译器是microsoft visual c ++ 2010.此代码通过system()函数编译C ++源文件,然后使用给定的输入文件运行生成的程序。然后程序将该程序生成的输出文件与预期结果文件进行比较,以确定程序是否正确。我的以下代码是:
#include <iostream>
#include <fstream>
using namespace std;
string getfile(string);
int execute(string,string);
void checkit(ifstream&,ifstream&);
int main() {
string command;
string input,output,source,expected;
ifstream in,exp;
int code;
source=getfile("source");
input=getfile("input");
expected=getfile("expected result");
code=execute(source,input);
if(code!=0) {
cout<<"Execution error,program aborted!\n";
system("pause");
return 0;
}
in.open("output.txt"); //open file
if(in.fail()) { //is it ok?
cout<<"created output file did not openplease check it\n";
system("pause");
return 1;
}
exp.open(expected.c_str()); //open file
if(exp.fail()) { //is it ok?
cout<<"expected output file did not openplease check it\n";
system("pause");
return 1;
}
checkit(in,exp);
in.close();
exp.close();
system("pause");
return 0;
}
void checkit(ifstream& act,ifstream& exp) {
int i,error=0,j;
int n,m,total=0;
act>>n;
exp>>m;
while(act&&exp) {
total++;
if(n!=m)
error++;
act>>n;
exp>>m;
}
if(act || exp)
error++;
if(error==0)
cout<<"The output of the program iscorrect.\n";
else
cout<<"The output of theprogram is not correct.\n";
cout<<"Your grade is"<<(total-error)/(double)total*100.<<"%\n";
}
int execute(string source,string input) {
string command,minusc;
int c,pos;
pos=source.find('.',0);
minusc=source.substr(0,pos);
command="gcc -o "+minusc+" "+source;
c=system(command.c_str());
if(c!=0) {
cout<<"compilation error\n";
return c;
}
command=minusc+" "+input+" > output.txt";
c=system(command.c_str());
if(c!=0)
cout<<"execution error\n";
return c;
}
string getfile(string mess) {
string file;
cout<<"Please enter the name of the "<<mess<<"file: ";
cin>>file;
return file;
}
答案 0 :(得分:0)
您应该说出编译器错误是什么。我在Visual Studio中尝试过,结果你需要
#include <string>
位于文件顶部。
答案 1 :(得分:0)
system
使用命令参数调用主机环境的命令处理器,它在linux和windows上有不同的行为。
假设你们所有的输入都是有效的。
system
函数,gcc通常默认安装在linux中,所以它
运行正常。Visual C ++提供命令行工具,请参阅帮助页面:http://msdn.microsoft.com/en-us/library/f35ctcxw.aspx以获取详细信息。
简单地说,您可以重新制作&#39; gcc &#39;在您的代码中使用&#39; CL &#39;这样它就可以在windows上编译(使用VC ++)。