Da qualche giorno ho ripreso libri e appunti utilizzati qualche annetto fa' per sostenere un esame sul linguaggio C, con l'obiettivo di riprendere tale linguaggio.
Dopo aver chiesto sul forum un consiglio su quale IDE utilizzare, ho optato per wxDev-C++, quindi ho scaricato ed installato il programma, l'ho aperto e ho buttato subito giù 2 righe per vedere se ricordavo almeno come prendere dei numeri da imput e poi stampare il risultato di alcune operazioni a video ( dopo 2 anni senza scrivere un rigo, già fare questo sarebbe stata una vittoria :lol: )
#include <stdio.h>
main(){
int a, b, somma, prodotto;
printf("Inserire un primo numero: \n");
scanf("%d", &a);
printf("Inserire un secondo numero: \n");
scanf("%d", &b);
somma=a+b;
prodotto=a*b;
printf("SOMMA: %d \n", somma);
printf("PRODOTTO: %d \n", prodotto);
getchar();
}
Compilo il programma, ricevo un messaggio che mi conferma che il tutto va bene e quindi lo eseguo, inserisco il primo numero e premo invio, inserisco il secondo numero e premo invio, neanche un secondo e si chiude tutto.
A questo punto iniziano i miei problemi, subito penso: " ma la getchar() alla fine non serve a bloccare l'esecuzione del programma in attesa della pressione di un tasto? strano..... " allora subito mi metto alla ricerca per cercare di capire il motivo di questo strano comportamento e dopo aver girovagato su qualche sito arrivo alla seguente conclusione:
Ogni volta che viene premuto un tasto, il carattere corrispondente viene inserito in un'opportuna area di memoria, chiamata buffer, poi quando viene eseguita una scanf, i caratteri vengono letti dal buffer e portati nella variabile che deve essere letta, quindi, quando inserisco da tastiera il secondo numero (b), siccome prima premo i tasti corrispondenti alle cifre (ad esempio, 30), e poi batto il tasto "invio", nel buffer vengono scritti 3 caratteri: '3' '0' ed invio, dove il carattere '3' e lo '0' vengono convertiti in numero intero ed assegnati alla variabile b, invece il carattere invio rimane nel buffer.
A questo punto la getchar() inserita alla fine si va a prendere lei il carattere invio ed è questo il motivo per il quale il programma non si blocca ad aspettare il mio invio finale

.
Quindi è necessario un qualcosa per pulire il buffer da quell'invio che resta al suo interno, ed a tal fine ho utilizzato la funzione
fflush(stdin) subito dopo l'ultimo scanf(), modificando in questa maniera il mio programmino:
#include <stdio.h>
main(){
int a, b, somma, prodotto;
printf("Inserire un primo numero: \n");
scanf("%d", &a);
printf("Inserire un secondo numero: \n");
scanf("%d", &b);
fflush(stdin);
somma=a+b;
prodotto=a*b;
printf("SOMMA: %d \n", somma);
printf("PRODOTTO: %d \n", prodotto);
getchar();
}
che adesso mi aspetta per permettermi di visualizzare il risultato
Morale della favola, penso di aver capito e risolto il problema, ora se il metodo da me utilizzato è giusto questo messaggio potrebbe in futuro essere utile a qualche utente del forum o esterno ,in caso contrario, ovvero se esistesse qualche altro metodo, sono tutte orecchie in quanto come da firma ho tanta voglia di imparare......