Originariamente inviato da gennahouse
ho dovuto cambiare questa:
scanf("%c", &operatore);
in questa
scanf(" %c", &operatore);
praticamente aggiungere uno spazio tra l'apice e % assurdo...
E' lo stesso problema dell'altra volta relativo al buffer di input. Quando ricorri alla scanf() è sempre possibile risolvere giocando un po' con le stringhe di formato, ad esempio si può risolvere anche riscrivendo quella riga con
codice:
scanf("\n%c", &operatore);
oppure lasciandola così com'è ma modificando quella precedente
codice:
scanf("%d%*c", &primo);
che ha l'effetto di leggere il carattere di newline (INVIO) e scartarlo dal buffer (l'asterisco nel codice di formato serve a sopprimere l'input).
Insomma di soluzioni ce ne sono, il problema è che, se come seconda istruzione di input avessi avuto una gets() (o meglio fgets()) anziché una scanf(), non avresti potuto ricorrere a questi trucchetti perché queste funzioni non hanno la stringa di formato come la scanf().
Insomma in generale il modo migliore di risolvere il problema è di individuare l'istruzione di input che da problemi (scanf(), fgets() o qualsiasi altra cosa) e piazzarci prima un
codice:
while (getchar() != '\n');
Per il resto il programma è corretto, non hai nulla da buttarti giù. Presta solo attenzione a poche cose come ad esempio (è ovviamente un errore di distrazione) l'ultimo "else if" della sequenza:
codice:
}else if (operatore == '-')
lì ci va '/', non '-'. Inoltre, fatta questa modifica, cosa succede se provo a fare, per esempio, l'operazione 4 / 0 ?
Potrebbe comunque essere un esercizio modificare questo programma ricorrendo ad un costrutto switch anziché a quella sequenza if-then-else: più elegante e (pare) più performante.
Infine, chiedevi di altri esercizi? Per iniziare esistono i classici sugli array, sulle matrici... trova il massimo/minimo, trova la media, stampa le tavole pitagoriche, data una matrice fai la somma del triangolo superiore/inferiore o della diagonale o di una certa riga/colonna, inverti un array, inverti una stringa, ordina un array (e si apre il capitolo sugli algoritmi di ordinamento, molto utili a fini didattici), data una stringa trova la posizione di una certa sottostringa... e poi un *must* per tutti i neofiti della "computer programming art": la successione di Fibonacci.
Insomma di possibili esercizi ce ne sono a centinaia, cerca un po' in giro per il web qualche spunto. E non copiare codice, non serve assolutamente a nulla (se non le primissime volte).