Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Chry on 15-10-2013, 19:53:06



Title: Programmazione in C - Come evitare la chiusura dei programmi automatica
Post by: Chry on 15-10-2013, 19:53:06
Pare che questo sia il primo anno da diverso tempo in cui si programma in C in Prog1, quindi ho pensato che fosse una buona idea cominciare a guardarlo un po'. Mentre stavo provando a capire il lessico di questo linguaggio e dopo aver provato qualche programmino banale mi sono imbattuto in un problema.. Ogni volta che l'esecuzione del programma raggiunge la fine del codice, l'applicazione si chiude immediatamente e ho a stento il tempo di vedere l'output. Qualcuno mi ha suggerito di provare a risolvere il problema aggiungendo un "getchar" alla fine ma non mi piace molto così... Non ci credo che non esiste un modo più elegante! Qualcuno può aiutarmi?


Title: Re:Programmazione in C - Come evitare la chiusura dei programmi automatica
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 15-10-2013, 23:37:56
Dipende dall'"ambiente" entro cui stai visualizzando l'output.

Come programmi in C? Dentro un IDE? Dal blocco note? Da dentro un editor a riga di comando?
E soprattutto, come fai il test dell'esecuzione? Da dentro un IDE? Da dentro il prompt dei comandi?
In quale sistema operativo sei?

Brevemente: quando il tuo programma termina, fine! Termina! Non deve fare null'altro!
L'output è e rimane su una cosa che ancora forse non conosci ma che si chiama stdout (se non hai modificato nulla), che è un valore di tipo FILE* associato a uno stream (ambienti POSIX), il numero 1 per la precisione.

Il problema di "vedere" l'output non ha nulla a che fare con il tuo programma, e in teoria non è nemmeno una cosa da programmazione, quindi la cosa migliore è di capire l'ambiente entro cui lavori e operare al suo interno per essere sicuro.

Preferibilmente, se io devo controllare l'output di un programma, e questo output va su stdout (normalmente collegata allo schermo), allora eseguo il mio programma da dentro un prompt dei comandi (shell, terminale, console, chiamatela come volete) e, nel caso in cui l'output sia troppo lungo a) lo redirigo su un file (che posso poi ispezionare con calma con il Blocco note) oppure b) uso un comando come more o less messo in pipe (cioè scrivo tipo ./mioprogramma | less oppure mioprogramma.exe | more).

Allo stato attuale delle cose, se di ciò che ho scritto non sai nulla, invocare getchar () è la cosa migliore :pray!


Title: Re:Programmazione in C - Come evitare la chiusura dei programmi automatica
Post by: Chry on 18-10-2013, 16:03:48
Grazie per la risposta,
sto utilizzando il Dev-C++, e siccome l'obiettivo del mio esercizio era avere in output un risultato beh... direi proprio che ha a che fare col mio programma! Qualche collega sul gruppo di facebook mi ha suggerito di usare system("PAUSE"), ed è proprio quello che cercavo per risolvere il problema! Sono certo che fare la somma di due numeri ha poco a che fare con la programmazione ma da qualche parte devo pur cominciare, giusto?


Title: Re:Programmazione in C - Come evitare la chiusura dei programmi automatica
Post by: Alfio94 on 18-10-2013, 19:49:56
Devi usare sicuro
 System("PAUSE"); 
prima della fine della chiusura del main


Title: Re:Programmazione in C - Come evitare la chiusura dei programmi automatica
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 18-10-2013, 21:17:19
"Devi", "sicuro"...

Insomma... .bah

A parte che C è sensibile alle maiuscole-minuscole (case-sensitive), quindi scrivere System è diverso da scrivere system, e non funziona... :pray

Se poi parliamo dell'eleganza, allora andava meglio quel getchar() invece di invocare una funzione dipendente dal sistema sottostante (mentre C non dovrebbe dipendere dal sistema sottostante, almeno non a Programmazione 1).

Fare la somma di due numeri è bensì un utile esercizio. Bloccare il programma perché si veda l'output, no.


Title: Re:Programmazione in C - Come evitare la chiusura dei programmi automatica
Post by: Chry on 22-10-2013, 05:40:41
Capisco, grazie mille mille per il suggerimento!
Se usare un getchar() é meglio per molti versi non vedo perché non farlo! Se non altro ho scoperto una nuova  :[Emoticon] PC Asd: