PDA

Visualizza la versione completa : [C++] Usare funzione system() con una variabile


Davithebest
19-06-2012, 11:08
Salve a tutti, sono un novellino del forum anche se questa community mi è piaciuta molto e vi faccio i complimenti.

La mia domanda è: C'è un modo per usare la funzione system(variabile_char)?
il problema è che nel mio programma devo avviare delle applicazioni windows (.exe), ma il nome di essa viene fornito dall' utente all'inizio del programma.
Ho fatto moltissime ricerche sul web ma niente. Spero che voi mi possiate aiutare :)

oregon
19-06-2012, 11:15
Strano che hai dovuto fare ricerche su Internet e strano che non hai trovato nulla dato che sono funzionalità di base del C/C++.

Tu sai come dichiarare un vettore di char ?

Davithebest
19-06-2012, 11:31
Hai ragione, scusa, mi sono spiegato male io.
Quello che devo fare è usare system(variabile_char+".exe"); ad esempio
perchè lo stesso programma lo devo usare per compilare file .java con il comando del cmd "javac nomefile.java"
mi scuso ancora per il malinteso

oregon
19-06-2012, 11:51
Sì ... avevo capito ... ma tu hai le basi del C (o del C++) perché è una cosa molto semplice.

Sai dichiarare un variabile stringa del C (o una string del C++)?

MItaly
19-06-2012, 12:02
Tutto il tuo problema si riduce alla concatenazione di due stringhe, rileggi il capitolo relativo ad esse nel tuo libro di C++.

Davithebest
19-06-2012, 18:31
Scusate la mia ignoranza ma continuo a non capire :bhò:
non potreste spiegarvi con un esempio?

oregon
19-06-2012, 18:42
Un esempio lo trovi ovunque su internet.

Per una stringa in C++ basta scrivere

string s;

Poi la usi nella funzione system tramite il metodo c_str

Per utilizzare il metodo c_str basta documentarsi

http://www.cplusplus.com/reference/string/string/c_str/

A questo punto, proponi tu un tuo tentativo di (semplice) codice e se ne parla, senza aspettarti tutto dal forum ...

Non ci si scusa per l'ignoranza ma si supera con l'impegno ...

Davithebest
20-06-2012, 21:19
Ho risolto (di sicuro non grazie a voi) con la funzione cstrcat
Ecco a voi il listato del mio programma ovviamente non finito, pieno di bug e probabilmente malfunzionante:


char nomefile[256];
char testo[256];
char java[20]=".java";
char comandocompiler[256]="javac ";
char comandoopen[256]="C:/windows/notepad.exe ";
char comandojava[256]="java ";
int indice = 0;
char nomefileintero;
char nome[256]="";
string scelta;


cout << "inserire il nome del file(senza estensione): ";
cin >> nomefile;

strcat (nome,nomefile);
strcat (nomefile, java);
strcat (comandoopen, nomefile);
strcat (comandocompiler, nomefile);
strcat (comandojava, nome);

ifstream FileJava(nomefile);
if (!FileJava){
cout << "Impossibile trovare il file, ne verrà creato uno"<<endl;
ofstream FileJava1(nomefile);
FileJava1 << "public class "<<nome<<"{"<<endl;
FileJava1 << "public static void main(String[] args){"<<endl;
FileJava1 << "}"<<endl<<"}";
FileJava1.close();
system(comandoopen);
goto scelta;
}
else{
cout <<endl;
while (!FileJava.eof()){
FileJava.get(testo[indice]);
cout << testo[indice];
indice++;
}
scelta:
FileJava.close();
SetColor(BLUE);
cout << endl <<"Modifica il listato => 1";
cout << endl <<"Compila il file .java => 2"<<endl;
SetColor(GRAY);
cin >> scelta;
if (scelta == "1")system(comandoopen);
if (scelta == "2"){
goto dopo;
}
if (scelta != "1" && scelta != "2") cout << "Inserisci 'si' o 'no'!";goto scelta;
dopo:
SetColor(RED);
cout << "COMPILAMENTO FILE IN CORSO: ATTENDERE"<<endl;
SetColor(GRAY);
Sleep(2000);
system(comandocompiler);
cout << endl;
SetColor(GREEN);
system(comandojava);
SetColor(GRAY);
cout <<endl;
SetColor(RED);
cout << "COMPILAZIONE COMPLETATA CON SUCCESSO"<<endl;
SetColor(GRAY);
}
}
system("PAUSE");
return 0;


lo so manca il main (è quello non c'è solo scritto) perchè è solo una parte

MItaly
20-06-2012, 21:39
Come scritto da oregon, in C++ è decisamente più comodo usare la classe std::string, è più comoda da usare ed eviti tutti i problemi di potenziali buffer overflow.

oregon
20-06-2012, 21:44
Originariamente inviato da Davithebest (di sicuro non grazie a voi)

Ma grazie a noi potrai evitare certi termini come

COMPILAMENTO

... toglilo ...

Loading