PDA

Visualizza la versione completa : [C] Programma "Hello World" si chiude istantaneamente


novello c
20-03-2011, 14:57
salve a tutti, ho da poco intrapreso l'apprendimento del C da autodidatta, usando un libro abbastanza famoso, che forse qualcuno conosce: "C corso completo di programmazione";
ma mi è già sorto un problema.
prima usavo win xp e un ide obsoleto come turbo C; ma tutto andava bene (o, almeno, riuscivo a scrivere programmi super-semplici tipo hello world o roba simile).
ora uso win 7 e un ide decisamente più avanzato come microsoft visual studio 2010.
(non ho aperto la discussione nel forum apposito perchè il problema non è con l'ide)
però quando eseguo un programma con una scrritta da stampare a video, il prompt si apre con la scritta, ma si chiude dopo una frazione di secondo!!!
non so se il problema sia con il codice (non penso) ma ve lo posto per sicurezza:

#include <stdio.h>

int main(void)
{
printf("hello world");

return 0;
}

grazie a tutti ciao

MItaly
20-03-2011, 15:00
Il programma viene lanciato, ma naturalmente termina prima che tu riesca a vedere il risultato; per risolvere il problema puoi mettere un breakpoint sul return 0, oppure inserire una getchar(); prima del return 0; in modo che prima di terminare attenda la pressione di Invio.

novello c
20-03-2011, 15:05
gentilissimo... ma io sono ancora novello :( mi puoi spiegare come inserire la getchar? grazie mille ancora...

MItaly
20-03-2011, 15:15
Non c'è molto da dire... inserisci getchar(); prima di return 0; :fagiano:

novello c
20-03-2011, 15:33
yuppiiiiiiii :unz: funzionaaaa
grazie mille :D

MItaly
20-03-2011, 15:37
:ciauz:

asteroid
25-03-2011, 18:25
potevi inserire semplicemente alla fine.




system("pause");

Celebron
25-03-2011, 18:48
in realtà farebbe meglio a non usarla e in generale ad evitare per quanto possibile le System
a livello di operazioni sono parecchio onerose e in più non è portabile in tutti i sistemi

un esempio di ciò che fa la chiamata system()

t's a very expensive and resource heavy function call. It's like using a bulldozer to open your front door. It works, but the key is cleaner, easier, cheaper. What system() does is:

suspend your program

call the operating system

open an operating system shell (relaunches the O/S in a sub-process)

the O/S must now find the PAUSE command

allocate the memory to execute the command

execute the command and wait for a keystroke

deallocate the memory

exit the OS

resume your program

There are much cleaner ways included in the language itself that make all this unnessesary.

MItaly
25-03-2011, 21:03
Originariamente inviato da asteroid
potevi inserire semplicemente alla fine.




system("pause");

Una delle mie priorità su questo genere di domande è proprio evitare che la gente si prenda l'abitudine di usare la funzione system, per i motivi che ho già detto un milione di volte in passato. :madai!?:

MacApp
26-03-2011, 04:52
Con l'introduzione della pausa finale (con getchar o altro) in realtà è stata come minimo alterata la specifica del programma che, si suppone, fosse solo quella di scrivere "hello world" a console ed uscire, non quella di scrivere "hello world" a console ed aspettare ad infinitum.

Per vederne il risultato prima che il programma si chiudesse, potevi ad esempio "lanciare" il programma direttamente da console, oppure utilizzare un debugger.
;-)

Loading