Pages: [1]   Go Down
Print
Author Topic: Programmazione in C - Come evitare la chiusura dei programmi automatica  (Read 3619 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Chry
Matricola
*
Offline Offline

Posts: 10


« 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?
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 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!
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Chry
Matricola
*
Offline Offline

Posts: 10


« Reply #2 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?
Logged
Alfio94
Matricola
*
Offline Offline

Posts: 84


« Reply #3 on: 18-10-2013, 19:49:56 »

Devi usare sicuro
 System("PAUSE"); 
prima della fine della chiusura del main
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #4 on: 18-10-2013, 21:17:19 »

"Devi", "sicuro"...

Insomma...

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.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Chry
Matricola
*
Offline Offline

Posts: 10


« Reply #5 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  pc
Logged
Pages: [1]   Go Up
Print
Jump to: