Ayuda con programa en c++

  • Iniciador del tema pedrinlarin
  • Fecha de inicio
Estado
Cerrado para nuevas respuestas.
P

pedrinlarin

Guest
Hola a todos, soy nuevo por estos rumbos :) , bueno, a mi me gusta mucho la programacion, y algún dia poder ser uno de los mejoer (sueños vagos) y e estado practicando, pero si me a costado mucho trabajo, y la verdad me tope con un programa que, no me sale :(
Aun no comprendo bien la estructura de c++ y actualmente tomo cursos, solo queria que me dieran una pequeña ayuda, para ver en que estoy fallando y poder mejorar.
Bueno, mi programa se supone debe hacer lo siguiente:

Realizar un programa que contenga un menu:
1.Registrar libros
2.Consulta
3.Salir
en el numero 1 se debera poder registrar libros
(materia, autor, editorial y precio )
regresar al menu presionando cualquier tecla
en el 2 consultar los libros que se registraron por materia
y el valor de ellos de la materia escogida
y 3 salir

Y bueno, esto es lo que llevo, pero esta muy mal :(
Código:
#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{
system("cls");
printf("MENU.\n");
printf("1 - Registrar libros.\n");
printf("2 - Consultar libros.\n");
printf("3 - Salir.\n");
printf("Ingrese una opcion[1-3]: ");
scanf("%d",&opcion);
system("cls");
switch(opcion){
case 1: printf("Ingrese la materia: ");
scanf("%d",&libro.iD);
printf("\nIngrese autor: ");
fflush(stdin);
gets(libro.nombre);
printf("\nIngrese el precio: ");
scanf("%d",&libro.precio);
f=fopen("C:\\alums.dat","a");
fwrite(&libro,sizeof(Datos),1,f);
fclose(f);
printf("\nDatos agregados correctamente.\n");
system("pause");
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);}
fclose(f);}
system("pause");
break;}
}while(opcion!=3);
return 0;}

Agradeceria mucho si alguien me pudiera ayudar, para ver en que estoy mal, o que me falta, muchas gracias de antemano :)
 

rob1104

Super Moderador
Super Moderador
Hola pedrinlarin, solamente la observación de que el lenguaje en que estas desarrollando es C, no C++, espero sea igual de valido para tu proyecto.

Solo había un error al escribir y leer, ya que al escribir lo hacías en el archivo alum.dat y leías desde libro.dat

El código identado (para mejorar su lectura) y corregido queda asi:
Código:
#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 {
        system("cls");
        printf("MENU.\n");
        printf("1 - Registrar libros.\n");
        printf("2 - Consultar libros.\n");
        printf("3 - Salir.\n");
        printf("Ingrese una opcion[1-3]: ");
        scanf("%d",&opcion);
        system("cls");
        switch(opcion){
            case 1:
                printf("Ingrese la materia: ");
                scanf("%d",&libro.iD);
                printf("\nIngrese autor: ");
                fflush(stdin);
                gets(libro.nombre);
                printf("\nIngrese el precio: ");
                scanf("%d",&libro.precio);
                f=fopen("C:\\libro.dat","a");    //Aqui tenias alum.dat
                fwrite(&libro,sizeof(Datos),1,f);
                fclose(f);
                printf("\nDatos agregados correctamente.\n");
                system("pause");
            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);
                    }
                    fclose(f);
                }
                system("pause");
            break;
        }
    }while(opcion!=3);
    return 0;
}

Así funciona correctamente.

Saludos
 
Estado
Cerrado para nuevas respuestas.
Arriba Pie