hay varios errores ahí no de programación sino de lógica.
si quieres obtener una media pues deberas que dividir algo por algo no o sea el numero entrado dividido por la cantidad que es el contador.
Bien te voy a decir lo que he visto malo y lo arreglas.
cuando pongo el 5 cuatro veces y lo vas sumando tendria que dar 20 pero cuando al seguiente bucle le pongo el -1 para salir es como si le estoy sumando un -1 :S
debes poner algo que haga una comprobacion que si el valor entrado es diferente de -1 solo entonces se incrementa y hace la suma por que ambos funcionan una vez mas para que pulses ese -1.
si pongo 5 5 5 5 y después -1 es como sumar 5+5+5+5+-1 eso es fatal :O
Ademas el contador tambien funciona una vez mas para el -1 si son 4 numeros entrados esta dividiendo por 5 fatalfatal jeje
eso se arregla así:
Código C++:
Ver originalif (grade != -1){
total = total + grade;//adds the grade typed by the user to the total
counter = counter + 1;//adds one to the counter
}
Código C++:
Ver original//3.8 CLASS AVERAGE PROGRAM WITH SENTINEL CONTROLLED REPETITION
#include <stdio.h>
int main (void)
{
int counter;//number of grades entered
int grade;//grades value
int total;//sum of grades
float average;//average
//initialization phase
total = 0;
counter = 0;
grade = 0;
//processing phase
while( grade != -1) {
puts( "Please type the grade and press enter. To finish type \"-1\"." );//asks user to type a grade scanf( "%d", &grade
);//stores the grade typed by the user into the grade variable
if (grade != -1){ //Mi solucion
total = total + grade;//adds the grade typed by the user to the total
counter = counter + 1;//adds one to the counter
}
}//end while
printf( "total%d, contador%d\n", total
, counter
); // con esta linea ves lo que vale ambos valores antes de hacer el (total / counter), hacer comprobaciones sirve para tener un mayor control. prueba añadir esta linea a tu programa anterior y lo veras lo que digo XDD
//termination phase
//if counter is not equal to zero, calculate the average and print it, if not print "No grades were entered"
if( counter != 0){
average = ( float ) (total / counter); // Aemas encerrar (total/counter) para obligar a hacer el calculo antes del cast
printf( "Average is %.2f\n", average
); }//end if
else{
puts( "No grades were entered" ); }//end else
}//end main
Ademas he señalado algo que es encerrar (total / counter) para obligar a que haga el calculo antes del cast (float).
El programa parece funcionar ahora.