Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Estructuras en C

Estas en el tema de Estructuras en C en el foro de C/C++ en Foros del Web. Buenos días. Tengo un percance con un programa que estoy tratando de hacer. Se trata de hacer dos estructuras, una que contenga un cliente y ...
  #1 (permalink)  
Antiguo 31/01/2013, 08:27
 
Fecha de Ingreso: noviembre-2012
Mensajes: 9
Antigüedad: 11 años, 5 meses
Puntos: 0
Estructuras en C

Buenos días. Tengo un percance con un programa que estoy tratando de hacer.
Se trata de hacer dos estructuras, una que contenga un cliente y su información personal, otra para etiquetado e inventariado de CD, luego, si es necesario, crear una nueva para el alquiler de los CD. Tengo planteado algo, pero el programa se me cierra al ingresar alguna opción a realizar, no detecto el error. Quisiera saber si me pueden ayudar: (trabajo con Codeblocks en windows)

Código:
#include <stdio.h>
#include <string.h>


struct cliente
{
    int cedula;
    char nombre[10];
    char apellido[10];
    char fdn[15];
    char sexo[10];
    int edad;
}clien;

struct cd
{
   int codigocd;
   char autor[10];
   char album[10];
   char titulo[10];
   int npista;
}disco;

struct alquilercd
{
    char cdalquilado[30];
    char fechaalquiler[15];
    int c;
}alqui;

     void insertarcd();
     void insertarcliente();
     void alquilarcd();
     void retornarcd();

void insertarcd(){
                 printf("Codigo de CD\n");
                 scanf("%d", &disco.codigocd);
                 printf("Nombre del Autor\n");

                 scanf("%s", &disco.autor);
                 printf("Titulo del Album\n");
                 scanf("%s", &disco.album);
                 printf("Nombre del Titulo\n");
                 scanf("%s", &disco.titulo);
                 printf("Numero De Pistas\n");
                 scanf("%d", disco.npista);
                 FILE *archivo;
                 archivo=fopen("c:\\disco.txt", "w");
                 if(archivo==NULL)
                return 1;
    fprintf(archivo, "\n");
    fclose(archivo);
                }

void insertarcliente(){
                    printf("Digite la C.C\n");
                    scanf("%d", &clien.cedula);
                    printf("Digite el Nombre\n");
                    scanf("%s", &clien.nombre);
                    printf("Digite el Apellido\n");
                    scanf("%s", &clien.apellido);
                    printf("Digite La Fecha Nacimiento\n");
                    scanf("%s", &clien.fdn);
                    printf("Digite el sexo\n");
                    scanf("%s", &clien.sexo);
                    printf("Digite la Edad\n");
                    scanf("%d", &clien.edad);
                        FILE *archivo;
                 archivo=fopen("c:\\clientes.txt", "w");
                 if(archivo==NULL)
                 return 1;
    fprintf(archivo,"\n",clien.cedula,clien.nombre,clien.apellido,clien.fdn,clien.sexo,clien.edad);
    fclose(archivo);
                        }
void alquilarcd(){
       printf("digite la cc\n");
       scanf("%d", &clien.cedula);
       FILE *fichero;
    fichero = fopen("c:\\clientes.txt", "r");
    while(!feof(fichero));
    rewind(fichero);
    fclose(fichero);
    getchar();
}
void retornarcd(){
}

int main(){
           int a;
           do{
            printf("alquiler de CDs\n");
            printf("Menu\n");
            printf("Digite Opcion\n");
            printf("1.insertar cliente\n");
            printf("2.insertar CD\n");
            printf("3.alquilar CD\n");
            printf("Opcion\n");
            gets(a);

                  switch(a){
                  case 1:
                    insertarcliente();
                    break;
                  case 2:
                      insertarcd();
                      break;
                  case 3:
                      alquilarcd();
                      break;
                            }
           }
           while(a!=10);
}
  #2 (permalink)  
Antiguo 31/01/2013, 08:51
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: Estructuras en C

Hola, veo un error, borra dentro del scanf para los campos de tipo cadena el & delante.

Antes con &
Código C:
Ver original
  1. printf("Titulo del Album\n");
  2.  scanf("%s", &disco.album);

Ahora sin &
Código C:
Ver original
  1. printf("Titulo del Album\n");
  2.  scanf("%s", disco.album);

Luego comentas como te fue y sino menciona el error y linea donde falla.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #3 (permalink)  
Antiguo 31/01/2013, 08:54
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Estructuras en C

Estructuras globales? *_*

Un truco para saber donde está el error es ir poniendo getchar() linea a linea. De esa forma podrás identificar que línea es la que destroza el programa.
  #4 (permalink)  
Antiguo 31/01/2013, 09:31
 
Fecha de Ingreso: noviembre-2012
Mensajes: 9
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Estructuras en C

Capaprog, me sigue sucediendo lo mismo, ejecuta pero al ingresar una opción, se crashea.
Igual sucede si uso gets simplemente. No sé en sí si el código me servirá para lo que quiero entonces.

amchacon. Trataré de ver si me resulta para identificar el problema, pero no debería ser tan engorroso.
  #5 (permalink)  
Antiguo 31/01/2013, 09:41
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Estructuras en C

Cita:
Iniciado por n00b17 Ver Mensaje
Trataré de ver si me resulta para identificar el problema, pero no debería ser tan engorroso.
Realmente, lo ideal es hacerlo con un depurador. Pero a falta de depurador es un sistema bastante eficaz.

No tienes que ponerlo en todas las lineas, solo antes de las lineas que puedan fallar.
  #6 (permalink)  
Antiguo 31/01/2013, 09:51
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 3 meses
Puntos: 46
Respuesta: Estructuras en C

Buenas, de entrada tienes un par de warnings que saltan en el compilador, las funciones, si son void no deben devolver nada, deberías borrar el return.


Ahora vamos con el problema, yo te propongo que no uses gets() ya que es una funcion que induce a problemas con el buffer del input. Así que yo de ti crearía algo así, substituyendo el gets por un fgets y un sscanf que es lo que se debe usar para no tener problemas con el input.
Código C:
Ver original
  1. //dentro del main
  2. int a;
  3. char cad[15];
  4.  
  5. //antes del switch
  6. fgets(cad,sizeof(cad),stdin);
  7. sscanf(cad,"%d",&a);
  8.  
  9. //y ahora el switch
  10. switch(a)
  11. {
  12. ...
  13. }

Y con eso se debería solucionar el problema



Saludos
  #7 (permalink)  
Antiguo 31/01/2013, 18:02
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: Estructuras en C

Hola:

Con tantos errores que vi, me cansaría de subirlos y que luego lo interpretes, así que mejor te paso el código que lo corregido y si tienes dudas las comentas.

Código C:
Ver original
  1. //.
  2. //.
  3. //.
  4.  
  5. void insertarcd();
  6. void insertarcliente();
  7. void alquilarcd();
  8. void retornarcd();
  9.  
  10.  
  11.  
  12. int main() {
  13.     int a;
  14.     do {
  15.         printf("alquiler de CDs\n");
  16.         printf("Menu\n");
  17.         printf("Digite Opcion\n");
  18.         printf("1.insertar cliente\n");
  19.         printf("2.insertar CD\n");
  20.         printf("3.alquilar CD\n");
  21.         printf("4.salir\n");
  22.         printf("Opcion\n");
  23.         scanf("%d", &a);
  24.  
  25.         switch (a) {
  26.         case 1:
  27.             insertarcliente();
  28.             break;
  29.         case 2:
  30.             insertarcd();
  31.             break;
  32.         case 3:
  33.             alquilarcd();
  34.             break;
  35.         }
  36.     } while (a != 4);
  37.     return 0;
  38. }
  39.  
  40. void insertarcd() {
  41.     printf("Codigo de CD\n");
  42.     scanf("%d", &disco.codigocd);
  43.     printf("Nombre del Autor\n");
  44.  
  45.     scanf("%s", disco.autor);
  46.     printf("Titulo del Album\n");
  47.     scanf("%s", disco.album);
  48.     printf("Nombre del Titulo\n");
  49.     scanf("%s", disco.titulo);
  50.     printf("Numero De Pistas\n");
  51.     scanf("%d", &disco.npista);
  52.     FILE *archivo;
  53.     archivo = fopen("c:\\disco.txt", "w");
  54.     if (archivo == NULL)
  55.         return;
  56.     fprintf(archivo, "\n");
  57.     fclose(archivo);
  58. }
  59.  
  60. void insertarcliente() {
  61.     printf("Digite la C.C\n");
  62.     scanf("%d", &clien.cedula);
  63.     printf("Digite el Nombre\n");
  64.     scanf("%s", clien.nombre);
  65.     printf("Digite el Apellido\n");
  66.     scanf("%s", clien.apellido);
  67.     printf("Digite La Fecha Nacimiento\n");
  68.     scanf("%s", clien.fdn);
  69.     printf("Digite el sexo\n");
  70.     scanf("%s", clien.sexo);
  71.     printf("Digite la Edad\n");
  72.     scanf("%d", &clien.edad);
  73.     FILE *archivo;
  74.     archivo = fopen("c:\\clientes.txt", "w");
  75.     if (archivo == NULL)
  76.         return;
  77.     fprintf(archivo, "%d,%s,%s,%s,%s,%d\n", clien.cedula, clien.nombre, clien.apellido, clien.fdn, clien.sexo, clien.edad);
  78.     fclose(archivo);
  79. }
  80. void alquilarcd() {
  81.     printf("digite la cc\n");
  82.     scanf("%d", &clien.cedula);
  83.     FILE *fichero;
  84.     fichero = fopen("c:\\clientes.txt", "r");
  85.     while (!feof(fichero))
  86.         ;
  87.     rewind(fichero);
  88.     fclose(fichero);
  89.     getchar();
  90. }
  91. void retornarcd() {
  92. }
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%

Etiquetas: estructuras, fichero, int, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:49.