Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/12/2010, 08:12
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Problema con estructuras y ficheros.

Como entrada tienes un fichero de estructuras alumno, pero cuando lo lees estás leyendo directamente un float en x. Deberías leer una estructura alumno.

Cuando compruebas la nota, escribes (fwrite) el contenido apuntado por fichero, que es un puntero a la estructura FILE en la que has abierto el fichero de entrada. Las funciones fread/fwrite tienen, como primer parámetro, la dirección del buffer en que tienen que leer/escribir. Esto te ocurre en todos los fwrite del if y del else.

clase lo has declarado como array de estructuras. Tienes que indicar el índice correspondiente a la estrctura en uso. No puedes poner clase.nombre o clase.nota, tiene que ser clase[indice].nombre o clase[indice].nota (entiéndase por índice cualquier variable entera con la que estés indexando tu array de estrcturas).

El operador sizeof, si se aplica a un array dimensionado explícitamente, devuelve el total de bytes que necesita ese array, es decir, sizeof(alumno.nombre) te devolverá el valor 50.

Prueba con esto (supuestamente, x ya está declarada como struct alumno):

Código C++:
Ver original
  1. while(fread(&x,sizeof(x),1,fichero)!=0)
  2. {
  3.     if(clase[cont].nota<5)
  4.     {
  5.         fwrite(clase[cont].nombre, sizeof(clase[cont].nombre),1,suspendidos);
  6.         fwrite(&clase[cont].nota, sizeof(clase[cont].nota),1,suspendidos);
  7.     }
  8.     else
  9.     {
  10.         fwrite(clase[cont].nombre, sizeof(clase[cont].nombre),1,aprobados);
  11.         fwrite(&clase[cont].nota, sizeof(clase[cont].nota),1,aprobados);
  12.     }
  13.     cont++;
  14. }

(aunque no lo he probado, supongo que habrá quitado alguno de los errores que te daba).

Una última sugerencia: Conviene indicar el compilador y el sistema operativo con los que trabajas, también los errores que te haya reportado, servirá de guía a quien vaya a darte una posible respuesta.

Saludos,