PDA

View Full Version : problema nubbio in C


Ledmauro
19-12-2006, 20:09
Ciao a tutti. Ho da poco acquistato il libro "C corso completo di programmazione" e sto appena entrando nel mondo della programmazione :) Sono arrivato al while, ma non ho capito alcuni passi di un esempio che riporta il libro. L'esempio ha lo scopo di calcolare la media di una classe, e inserendo come valore del grado, il valore -1, il programma termina. Ecco il codice:

#include<stdio.h>
int main()
{
int counter;
int grade;
int total;
float average;

total= 0;
counter=0;

printf("Inserisci un grado, -1 per terminare \n");
scanf("%d", &grade);

while(grade != -1) {
total = total + grade;
counter = counter + 1;
printf(" Inserisci un voto: ");
scanf("%d", &grade);
}
if (counter != 0){
average= (float) total / counter;
printf("La media è %.2f", average);
}
else {
printf("Non hai inserito nessun voto");
}
return 0;
}

Adesso, non capisco alcuni passi...le mie domande sono:
1)Nel ciclo WHILE, perchè nn mette prima la funzione printf e scanf e poi sommare la somma è aumentare il contatore dei voti?
2)Perchè prima del ciclo WHILE bisogna inserire:
printf("Inserisci un grado, -1 per terminare \n");
scanf("%d", &grade);

Vi prego di rispondere in maniera chiara, perchè ho particolari difficoltà ancora :D :D Grazie anticipamente e ciao!!

vizzz
19-12-2006, 23:24
come puoi vedere la prima scanf la fai sopra il while...questo perchè se metti subito -1 esci diretto.
quindi se metti un valore valido entri nel while e il primo valore ce l'hai già, quindi lo sommi al totale, contatore ecc..
se poi dallo scanf dentro il while metti -1...esci
spero di essere stato chiaro

71104
20-12-2006, 01:41
1)Nel ciclo WHILE, perchè nn mette prima la funzione printf e scanf e poi sommare la somma è aumentare il contatore dei voti? printf e scanf le mette alla fine anziché all'inizio perché in tal modo il check del valore di uscita (-1) avviene praticamente subito dopo la scanf. se invece printf e scanf fossero all'inizio accadrebbe che prima del check verrebbe effettuata un'iterazione completa e il -1 verrebbe calcolato come un valore qualunque.

2)Perchè prima del ciclo WHILE bisogna inserire:
printf("Inserisci un grado, -1 per terminare \n");
scanf("%d", &grade); la scanf prima del while serve perché altrimenti quando entri nel while la prima volta fai un'iterazione senza aver fatto nessuna scanf prima. questo è causato dal fatto precedente, cioè che la scanf del while si trova alla fine anziché all'inizio.


più chiaro di così non ci riesco :D

Ledmauro
20-12-2006, 11:53
Grazie mille, ho capito :D :D