ENUNCIADO: Escribir un programa en C que calcule la nota media de tres alumnos. Las notas se encuentran en el fichero notas.txt. El resultado se debe añadir al final del mismo fichero con la siguiente frase:"La nota media de los tres alumnos es..."
El codigo que yo escribo es el siguiente:
#include <stdio.h>
main()
{
FILE *F;
int x,y,z,r;
F=fopen("notas.txt","a");
fscanf(F,"%d",&x);
fscanf(F,"%d",&y);
fscanf(F,"%d",&z);
r=x+y+z/3;
fprintf(F,"\nLa nota media de los tres alumnos es: %d",r);
fclose(F);
getch();
}
Y el resultado en el fichero de notas.txt es:
4 9 8
La nota media de los tres alumnos es: 2865719
No entiendo porque me da ese resultado, supuestamente la media de los 3 es: 7.
Si alguien sabe cual es mi error porfavor que me lo haga saber cuanto antes. ¡Mil gracias!
r=x+y+z/3;
Orden de las operaciones (http://es.wikipedia.org/wiki/%C3%81lgebra_elemental#Orden_de_las_operaciones)
F=fopen("notas.txt","a");
Función fopen (http://c.conclase.net/librerias/?ansifun=fopen)
Saludos
Cita de: Tzhed\ Kyperf/ en 20 Octubre 2012, 11:55 AM
r=x+y+z/3;
Orden de las operaciones (http://es.wikipedia.org/wiki/%C3%81lgebra_elemental#Orden_de_las_operaciones)
F=fopen("notas.txt","a");
Función fopen (http://c.conclase.net/librerias/?ansifun=fopen)
Saludos
Lo siento, pero me has dejado nada claro... soy principiante en esto y si no me ofreces una respuesta mas directa, no soy capaz de entender lo que me quieres decir. Aun así gracias por las molestias.
r=(x+y+z)/3;
y lo de la abertura del fichero te ha remitido a una pagina donde te explica un poco los ficheros... Una vez lo abres antes de hacer nada y de leer del fichero tendras que ver si se ha abierto bien , etc...
Como solucionar el calculo del promedio ya lo respondió maxim_o (faltaban los paréntesis).
En cuanto a la apertura del archivo te piden que realices dos operaciones: lectura de los tres números y escritura del promedio. Eso no lo puedes hacer con el modo "a" ya que este es un modo de escritura.
Debes utilizar el modo "a+" ya que este permite realizar operaciones de escritura (siempre al final del archivo) y de lectura (siempre indicando primero la posición desde donde se lee). Eso en detalle en el vinculo que te indicaron.
Parte de las modificaciones a tu programa:
/* Se abre el archivo en modo "agregar" (mas lectura) */
F = fopen("notas.txt", "a+");
/* Para colocarnos al principio del archivo (Lectura) */
rewind(F);
/* Lectura de los tres valores */
fscanf(F, "%d", &x);
fscanf(F, "%d", &y);
fscanf(F, "%d", &z);
r = (x + y + z) / 3; /* Division entera (no hay decimales) */
fprintf(F, "La nota media de los tres alumnos es: %d\n", r);
fclose(F);
También debes evitar el uso de funciones de la biblioteca conio de Borland como "getch", mas información sobre ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
Un saludo