PDA

Visualizza la versione completa : [C] Prime armi: chiusura indesiderata applicazione


robboso
06-07-2005, 14:30
ciao a tutti sono alle prime armi con C, e volevo scrivere un semplice programma:

#include <stdio.h>

main()
{
int i;
printf("Scrivi un intero");
scanf("%d", i);

if(i>100)
printf("minore di 100");
else
printf("maggiore o uguale a 100");
}
all'esecuzione di questo semplice programma, mi visualizza il terminale,
esegue la prima printf, ma una volta che scrivo un intero e do l'invio il
terminale si chiude automaticamente. Dove sbaglio????
grazie a chiunque mi dia una mano a capire i dilemmi dell'informatica.
Ad maiora
Ennio

InferNOS
06-07-2005, 15:14
Ciao robboso se hai qualche problema con il C puoi chiedere aiuto a me (anche io lo sto studiando ma sono + avanti di te...).
Allora l'errore sta qui:

scanf("%d", i);
lo scanf è differente dal printf,infatti devi mettere &i
Per il resto c'è un errore (penso di distrazione) nell'if:deve essere i<100 per dar senso alle printf.Ti consiglierei di modificare il programma così:
#include <stdio.h>

main()
{
int i;
printf("Scrivi un intero\n");
scanf("%d", &i);

if(i<100)
printf("minore di 100");
else if(i==100)
printf("uguale a 100");
else
printf("maggiore di 100");
}

robboso
06-07-2005, 15:36
ho provato come mi hai detto ma mi da sempre il solito problema!!
:(

alka
06-07-2005, 16:01
Non sono esperto di C ma...non è che il problema è dovuto al fatto che manca l'acquisizione di un INVIO o di un altro tasto prima di concludere il programma?

In questo modo, quando il programma termina, la finestra del Prompt dei Comandi viene chiusa istantaneamente senza permettere di prendere nota dei dati visualizzati poco prima.

E' questo il problema?

Ciao! :ciauz:

netarrow
06-07-2005, 16:04
l'errore segnalato da InferNOS è cmq un errore, il tuo problema però non è causato da quell'errore, anzi non è un errore.

La console quando esaurisce il buffer di output e quindi non ha niente altro da stampare si chiude, per evitare questo o usi il comando "pause" di windows o metti un qualsiasi sistema per intercettare l'input e bloccare il flusso.

o fai:

system("PAUSE");

o metti un getch(), un getchar() un altro scanf o altri sistemi di input


se non ti è chiaro il motivo per il quale si mette & davanti la variabile te lo spuego: in C come in altri linguaggi esistono i puntatori che praticamente contengono l'indirizzo di memoria della variabile, se tu passi i alla funzione, il valore che legge non saprà dove metterlo visto che tu gli passi il valore di i e non la sua posizione in memoria; quindi quando fai &variabile ottieni l'indirizzo di memoria di quella variabile, questo indirizzo può essere inserito in un puntatore che si dichiara cos':

Tipo* nome;

Prova a creare una variabile int i con valore 5 e a stampare il risultato di i e di &i. Vedrai che uno mostra 5 e l'altro qualcosa come 0x24153h o circa(l'indirizzo).

spero di essere stato chiaro.


:ciauz:

Loading