#c #g
#c #g
Вопрос:
кстати, я знаю, что это дубликат, но я не могу найти ответ!
Я пытаюсь создать файл C , который компилирует и запускает другой файл C и проверяет, корректен ли вывод (я знаю, это немного странно).
(в папке на рабочем столе есть eval.cpp и a.out папка «test»
в папке test есть main.cpp , tytytyt.in , tytytyt.out, tytytyt.ok)
eval.cpp
#include <iostream>
#include <fstream>
#include <bits/stdc .h>
#include <string>
using namespace std;
ifstream fa("~/Desktop/test/tytytyt.out");
ifstream fok("~/Desktop/test/tytytyt.ok");
string filename;
int a, ok;
int main()
{
cout << "In ce folder se afla fisierul pe care ai dori sa testezi? n";
cin >> filename;
string str = "g -o a.out" filename;
const char * command = str.c_str();
cout << "Compilare sursa cu ajutorul comenzii " << command << " ... n";
system(command);
cout << "Rulare fisier... n";
system("~/Desktop/test/a.out");
fa >> a;
fok >> ok;
if(a == ok) cout << "Corect!";
else cout << "Incorect!";
return 0;
}
Когда я запускаю, ~/Desktop$ g eval.cpp
он создает a.out
файл.
Затем я запускаю ~/Desktop$ ./a.out
.
Когда моя программа печатает In ce folder se afla fisierul pe care ai dori sa testezi?
и я пишу ~/Desktop/test/main.cpp
, программа печатает Compilare sursa cu ajutorul comenzii g ~/Desktop/test/main.cpp ...
Rulare fisier...
и затем появляется ошибка: sh: 1: /home/steven/Desktop/test/a.out: not found
и если я проверю тестовую папку, файл a.out
не существует.
Кто-нибудь может мне помочь? `
Комментарии:
1. Что вы пытаетесь сделать, наконец?
2. проверка правильности выходных данных
3. Почему вы ожидаете, что двоичный файл будет находиться в
test
подкаталоге? Ни в одной части команды сборки это не упоминается. Вам также, вероятно, понадобится пробел междуa.out
и именем входного файла.4. но как я могу поместить
a.out
вtest
?5. @Stevineon,
a.out
создается в вашем текущем рабочем каталоге (может быть запрошен с помощьюpwd
команды), а не в том же каталоге, что иmain.cpp
Ответ №1:
Имея
string str = "g -o a.out" filename;
const char * command = str.c_str();
cout << "Compilare sursa cu ajutorul comenzii " << command << " ... n";
system(command);
при успешной компиляции файл a.out создается в текущем каталоге, потому что вы не указали, где он должен быть сгенерирован
если вы хотите сгенерировать ~/Desktop/test/a.out
, замените
строка str = «g -o a.out» имя файла;
Автор:
string str = "g -o ~/Desktop/test/a.out" filename;
за исключением того, что я не понимаю, как может быть выполнена компиляция, потому что после a.out
нет пробела, который должен быть разделен именем файла, имя файла задается через cin >> filename;
, поэтому это слово и не может начинаться с пробела или другого разделителя, вы уверены, что компиляция была выполнена? Вы даже не тестируете результат работы системы …
Для меня это должно быть
string str = "g -o ~/Desktop/test/a.out " filename;
Комментарии:
1. Спасибо, теперь я понимаю: D