PDA

Visualizza la versione completa : [C] Esercizio: input da tastiera e somma di due numeri


Dark867
17-03-2011, 20:32
Ciao, mi vergogno immensamente a fare una domanda del genere ma a quanto pare sono costrettoXD
Volevo fare un programma in C e, avendo iniziato col C++, devo familiarizzare un po' con l'i/o, il programma di "esercizio" è una banale somma tra 2 numeri:

int somma(int a,int b){
int c = a+b;
return c;
}
int main(){
printf("inserisci il primo numero:\n");
int primo; scanf("%d",&primo);
printf("inserisci il secondo numero:\n");
int secondo;
scanf("%d",&secondo);
printf("la somma di %d e %d è:%d \n",primo,secondo,somma(primo,secondo));
return 0; }

Il problema è che, avviandolo, la frase "inserisci il primo numero" non compare, ma il programma si blocca subito in attesa dell'input da tastiera!
Cosa sbaglio??

Celebron
17-03-2011, 23:04
in c standard non puoi dichiarare una variabile nel mezzo del codice
tutte le variabili vanno dichiarate in testa alla funzione

Dark867
18-03-2011, 09:51
No ti sbagli non è quello...infatti ho appena notato una cosa strana!
Eseguendo il programma da console funziona perfettamente, questa cosa me la fa quando lo eseguo da dentro eclipse... :S

YuYevon
18-03-2011, 11:05
Il fatto che le dichiarazioni di variabili, in C puro, vadano *tutte* all'inizio del corpo di ciascuna funzione è vero, ma ciò non dovrebbe compromettere il funzionamento del programma (al massimo dovresti ottenere un errore o almeno un warning in fase di compilazione). Ora il fatto che tu usi Eclipse può dare luogo praticamente a qualsiasi fonte di errore... di peciso, sei sicuro che sia solo la prima stampa che non avviene? Se inserisci il primo numero cosa succede dopo? E tra le altre cose, visto che Eclipse non mi pare abbia un compilatore integrato per C/C++, quale compilatore stai usando? Io comunque mi libererei di quell'IDE il prima possibile.

Dark867
19-03-2011, 12:00
Ciao, ma c'è un motivo per cui occorra definire le variabili all'inizio?Onestamente non ho mai sentito una cosa simile e mi sembra una forzatura...
Cmq la dinamica è questa: aspetta l'input da tastiera per entrambi i numeri e, una volta inseriti, stampa in ordine le stringhe "inserisci primo","inserisci secondo" e "risultato è".
Sto usando mingw come compilatore, in effetti eclipse (che si allaccia a questo) è più adatto per java e lo vedo parecchio "impacciato" nel c...conoscete un IDE migliore? Non ditemi devcpp che lo odio a morte.

YuYevon
19-03-2011, 12:39
Originariamente inviato da Dark867
Ciao, ma c'è un motivo per cui occorra definire le variabili all'inizio?Onestamente non ho mai sentito una cosa simile e mi sembra una forzatura...


Non è una "forzatura", semplicemente è una caratteristica non prevista dal C "classico" (ISO C90); in realtà è stata introdotta poi nello standard successivo C99 (evidentemente per conformità al C++, similmente ai commenti con //), ma molti programmatori C preferiscono non ricorrervi lo stesso un po' perché non tutti i compilatori implementano le features del nuovo standard e un po' per motivi di abitudine/tradizione/puritanesimo/fede. Comunque di sicuro non è quella l'origine del problema perché se il compilatore non se ne lamenta significa che prevede la possibilità di dichiarazioni miste a codice.


Originariamente inviato da Dark867
Cmq la dinamica è questa: aspetta l'input da tastiera per entrambi i numeri e, una volta inseriti, stampa in ordine le stringhe "inserisci primo","inserisci secondo" e "risultato è".
Sto usando mingw come compilatore, in effetti eclipse (che si allaccia a questo) è più adatto per java e lo vedo parecchio "impacciato" nel c...conoscete un IDE migliore? Non ditemi devcpp che lo odio a morte.

Il Dev infatti *non va* utilizzato perché è vecchio, non più in sviluppo da anni e pieno di bug. Per la scelta dell'IDE dipende principalmente dal sistema su cui lavori: su Windows la scelta più ovvia sarebbe Visual C++ (sì, va bene anche per il C) ma c'è anche Code::Blocks (c'è la versione con compilatore mingw integrato). Su Linux ce ne sono tanti come il solito Code::Blocks, KDevelop (principalmente per KDE) o Anjuta (principalmente per GNOME) oppure una qualsiasi combinazione editor di testo + gcc. Ma per tutto questo comunque ti basta qualche ricerca sul web o anche su questo forum visto che sono discussioni quasi all'ordine del giorno.

Dark867
19-03-2011, 13:09
Ho lavorato un po' con code blocks per il c++ ma poi ho preferito avere tutto in un unico IDE che è eclipse, mi sa che tornerò a quello!

Guarda, nemmeno in C++ ho mai definito prima le variabili...volevo più che altro capire il perchè di tale scelta!Il linguaggio è compilato, quindi non c'è nessun overhead a creare variabili in mezzo al codice: il compilatore trova da sè le definizioni di variabili e nel programma generato sistema le cose in modo di allocarle sullo stack all'ingresso della funzione.
E' a mio avviso una forzatura perché, per l'appunto, forza una certa organizzazione del codice che non sempre potrebbe far piacere.

shodan
19-03-2011, 14:42
La scelta del C di dover dichiarare prima tutte le variabili risale agli albori del linguaggio: in altre parole è così e basta. Poi è arrivato qualcuno che la pensava come te e ha pensato di superare questo limite. Compilatori C puri ce ne sono ancora in giro, anche se nel mercato mainstream circolano più i compilatori C++. Per questo non hai mai avuto problemi.
Se però dovessi compilare quel codice con un compilatore C puro avresti degli errori.

Celebron
19-03-2011, 15:11
diciamo che, per rispetto dello standard originario, si tende a mettere le dichiarazioni tutte in testa in modo da garantire che il codice sia portabile (a me, personalmente, è capitato relativamente spesso che al posto del classico warning mi sputasse fuori un errore su variabili non dichiarate con alcuni compilatori)

in generale quindi si tende a non usare lo standard c99 in quanto non è ancora universalmente supportato. Se dai un occhiata a programmi in c fatti professionalmente (esempio banale il kernel di linux, oppure anche praticamente tutti quei programmi scritti in c che girano su linux) non troverai mai una variabile definita in mezzo al codice.

menphisx
19-03-2011, 15:14
--- EDIT ---

Loading