我有以下代码的错误

时间:2014-03-25 02:12:19

标签: c++ compiler-errors

我有以下代码的错误,我不确定我做错了什么。我的编译器是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;
}

2 个答案:

答案 0 :(得分:0)

您应该说出编译器错误是什么。我在Visual Studio中尝试过,结果你需要

#include <string>

位于文件顶部。

答案 1 :(得分:0)

system使用命令参数调用主机环境的命令处理器,它在linux和windows上有不同的行为。 假设你们所有的输入都是有效的。

  • 在运行程序的Linux上,它会调用&#39; gcc&#39;命令通过 system函数,gcc通常默认安装在linux中,所以它 运行正常。
  • 在Windows上运行程序时,它还会调用&#39; gcc&#39;命令 通过命令工具,你有这样的问题:&#39; gcc不是 被认可为内部或外部命令......因为您没有在Windows上安装gcc。

Visual C ++提供命令行工具,请参阅帮助页面:http://msdn.microsoft.com/en-us/library/f35ctcxw.aspx以获取详细信息。

简单地说,您可以重新制作&#39; gcc &#39;在您的代码中使用&#39; CL &#39;这样它就可以在windows上编译(使用VC ++)。