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

Alguien me puede decir porque no funciona esto??

Estas en el tema de Alguien me puede decir porque no funciona esto?? en el foro de C/C++ en Foros del Web. Hola amigos, ya estoy hasta la corona con este programa, no se porque no me guarda bien los datos, les agradeceria mucho si me pueden ...
  #1 (permalink)  
Antiguo 12/09/2006, 16:02
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Alguien me puede decir porque no funciona esto??

Hola amigos, ya estoy hasta la corona con este programa, no se porque no me guarda bien los datos, les agradeceria mucho si me pueden decir porque funciona mal este código... llevo horas analizandolo y no se porque agrega mal

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

typedef struct Arriendo {
       int codigo_arriendo;       //Código del arriendo 
       int codigo_auto;           //Código del auto
       char rut[10];               //Rut arrendatario
       char fecha_arriendo[10];    //Fecha en la que se arrendo
       char fecha_vencimiento[10]; //Fecha en la que vence el arriendo
       char estado[7];            //Estado del arriendo
       struct Arriendo *next;
}Arriendo;

struct Arriendo *CabezaArriendo;

void CrearArriendo(struct Arriendo **CabezaArriendo)
{
   *CabezaArriendo = NULL;
}

int VaciaArriendo(struct Arriendo *CabezaArriendo)
{
   if (CabezaArriendo == NULL)
      return 1;
   else
      return 0;
}


main()
{
   system("title Automotora (C) 1.0 - Power By El_Metallick");
   system("color 3f");

   CrearArriendo(&CabezaArriendo);
   
   struct Arriendo *Anterior;
   struct Arriendo *Siguiente;
   struct Arriendo *Nuevo;
   int cod;
   char fve[10];
   time_t tiempo;
   char fecha[10];
   struct tm *tmPtr;

      printf("INSERCION DE ARRIENDOS\n");
      printf("----------------------\n");

      Nuevo = (Arriendo *)malloc(sizeof(Arriendo));

      printf("\nEscriba el c%cdigo del Auto: ", 162);
      scanf("%d", &cod);
      
      printf("\nEscriba el rut del usuario (en formato XXXXXXXX-X y sin puntos (.)): ");
      scanf("%s", Nuevo->rut);
      
      printf("\nEscriba la fecha de vencimiento del arriendo (en formato aaaa/mm/dd): ");
      scanf("%s", fve);
   
      tiempo = time(NULL);
      tmPtr = localtime(&tiempo);
      strftime( fecha, 11, "%Y/%m/%d", tmPtr);

      Nuevo->codigo_arriendo = 1;
      Nuevo->codigo_auto = cod;
      strcpy(Nuevo->fecha_arriendo,fecha);
      strcpy(Nuevo->fecha_vencimiento,fve);
      strcpy(Nuevo->estado,"Vigente");

      if (VaciaArriendo(CabezaArriendo) || (strcmp(Nuevo->fecha_vencimiento,(CabezaArriendo)->fecha_vencimiento) < 0))
      {
         Nuevo->next = CabezaArriendo;
         CabezaArriendo = Nuevo;
      }
      else
      {
         Anterior = CabezaArriendo;
         Siguiente = Anterior->next;
      
         while ((Siguiente != NULL) && (strcmp(Siguiente->fecha_vencimiento,Nuevo->fecha_vencimiento) <= 0))
         {
            Anterior = Siguiente;
            Siguiente = Siguiente->next;
         }
      
         Anterior->next = Nuevo;
         Nuevo->next = Siguiente;
      }
   
   printf("\nAl auto %d fue arrendado por %s hoy %s hasta %s satisfactoriamente.\n\n", Nuevo->codigo_auto, Nuevo->rut, Nuevo->fecha_arriendo, Nuevo->fecha_vencimiento);
   getch();
}
Me sale esto:

Al auto 1 fue arrendado por 15148154-82006/09/122006/09/15Vigente hoy 2006/09/12
2006/09/15Vigente hasta 2006/09/15Vigente satisfactoriamente.

y me deveria salir esto:

Al auto 1 fue arrendado por 15148154-8 hoy 2006/09/12 hasta 2006/09/15 satisfactoriamente.

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #2 (permalink)  
Antiguo 12/09/2006, 18:00
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Fácil.

Debes añadir 1 más a cada array de chars.

Ejemplo: char fecha_arriendo[10] => char fecha_arriendo[11].
  #3 (permalink)  
Antiguo 12/09/2006, 18:25
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
era una tontera la verdad... muchas gracias pero lo que no entiendo es que si las fechas son xx/xx/xxxx son 10 caracteres y un array fecha[9] tiene 10 caracteres o estoy mal no se supone que es 0 1 2 3 4 5 6 7 8 9... saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #4 (permalink)  
Antiguo 12/09/2006, 18:39
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Sí, pero te olvidas del caracter nulo final.

[0] = '2'
[1] = '0'
[2] = '0'
[3] = '6'
[4] = '/'
[5] = '0'
[6] = '9'
[7] = '/'
[8] = '1'
[9] = '2'
[10] = 0 <--- !!

Un cero de verdad, no un 0 ASCII.
  #5 (permalink)  
Antiguo 12/09/2006, 20:02
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
verdad se me habia olvidado eso... saludos y gracias nuevamente
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
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 13:50.