PDA

Visualizza la versione completa : [C] getchar


cles
26-03-2010, 22:36
ciao a tutti,
sono nuovo del forum,novizio della programmazione e del linguaggio C con il quale ho iniziato.
Da qualche mese ho iniziato a leggere un libro che spiega il linguaggio C a partire da un livello completamente zero come il mio,sono solo all'inizio ma ho gi molte domande che mi frullano in testa e vorrei cominciare a darmi qualche risposta.
Un esercizio di programmazione di questo libro mi chiede di modificare un programma di qualche capitolo indietro nel quale inserendo N si visualizzano i quadrati da 1 ad N e fare in modo che si fermi a 24 e chieda di premere Invio.
Dopo qualche mezz'ora di prove e senza riuscirci ho guardato la soluzione e su questa vorrei delle lucidazioni: (non ho trovato il tasto code per postare il sorgente :bh: !?)

........
printf("This program prints a table of squares.\n");
printf("Enter number of entries in table: ");
scanf("%d", &n);
ch = getchar();

for (i = 1; i <= n; i++) {
printf("%10d%10d\n", i, i * i);
if (i % 24 == 0) {
printf("Press Enter to continue...");
ch = getchar();
.........

1- perch getchar() deve essere messo prima del ciclo?cosa non lo f funzionare mettendolo soltanto dopo?

2- perch scrivere if (i % 24 == 0) e non if (i == 24)?

3- io avevo usato while (ch != '\n').... per fermare a 24!; il secondo getchar che lo f fermare o cosa?

Grazie tante a chi mi potr aiutare.

oregon
27-03-2010, 10:05
Il getchar serve a svuotare il buffer dal tasto "Invio" utilizzato per l'inserimento del dato con la scanf. Se non ci fosse (e puoi provarlo ...) la prossima scanf non funzionerebbe ...

La if (con l'operatore modulo %) viene eseguita ogni 24 incrementi e non solo dopo i primi 24 ... questo consente di fermare lo scorrimento delle righe ogni 24 righe, non solo la prima volta ...

P.S. Il tasto Code quello con # (se ti soffermi un attimo sopra quel tasto, appare il suggerimento ...)

cles
27-03-2010, 11:41
Grazie,ora tutto chiaro.

Loading