Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [C++] Usare funzione system() con una variabile

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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 ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    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

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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++)?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Tutto il tuo problema si riduce alla concatenazione di due stringhe, rileggi il capitolo relativo ad esse nel tuo libro di C++.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Scusate la mia ignoranza ma continuo a non capire
    non potreste spiegarvi con un esempio?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    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:

    codice:
    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

  9. #9
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Davithebest (di sicuro non grazie a voi)
    Ma grazie a noi potrai evitare certi termini come

    COMPILAMENTO

    ... toglilo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.