Indetación: Es muy importante adecentar el código y que se vea limpio y claro. Por ello hay unas normas de estilo básicas:
- Cada llave en una nueva línea.
- Cada vez que se abra una llave, hay que dejar un "margen" de separación. Eso da una sensación visual de código en bloques, por lo cual es muy fácil identificar un if y un for correspondiente:
Por suerte para ti tengo un plugin que me lo ajusta automáticamente:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
struct Datos
{
int iD,precio;
char nombre[30];
};
int main(void)
{
int opcion;
struct Datos libro;
FILE *f;
do
{
printf("1 - Registrar libros.\n"); printf("2 - Consultar libros.\n"); printf("Ingrese una opcion[1-3]: "); switch(opcion)
{
case 1:
printf("Ingrese la materia: "); printf("\nIngrese el precio: "); scanf("%d",&libro.
precio); f
=fopen("C:\\alums.dat","a"); fwrite(&libro
,sizeof(Datos
),1,f
); printf("\nDatos agregados correctamente.\n"); break;
case 2:
if((f
=fopen("C:\\libro.dat","r"))==NULL
) printf("Error.\nNo hay datos agregados.\n"); else
{
while(fread(&libro
,sizeof(Datos
),1,f
) !=NULL)
{
printf("Materia: %d",libro.
iD); printf("\nAutor: %s",libro.
nombre); printf("\nPrecio:%d\n--------------\n",libro.
precio); }
}
break;
}
}
while(opcion!=3);
return 0;
}
Sigamos con la lección, el lenguaje que estás utilizando en ese código es C (no C++). A su vez podemos encontrar una mala práctica:
Nunca se debe usar fflush en una entrada (el teclado), esto está
PROHIBIDO
En su lugar te recomiendo:
Por otro lado:
Esta función está anticuada y puede presentar problemas (la cadena nombre tiene 30 caracteres, que pasa si el usuario te introduce 40?). En su lugar se recomienda fgets ya que le puedes poner una cantidad máxima de caracteres a leer:
Código C:
Ver originalfgets(libro.
nombre,30,stdin
); // Lee hasta 30 caracteres desde el teclado (stdin)
Por lo demás, el código está correcto y muy bien (mejor que otros códigos que he visto). Hay algunas cosas que me chirrian como las llamadas a system:
Pero mientras programes en Windows debería ir bien.