problemas con dev c++

Iniciado por sebatoyo, 28 Agosto 2013, 07:32 AM

0 Miembros y 1 Visitante están viendo este tema.

sebatoyo

nose si va aca o no esta duda en fin tengo un problema, cuando me compila el siguiente codigo me imprime basura a la hora de listar los contactos por favor ayuda desde ya gracias!

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <iostream>


typedef struct a        {
                       char nombre[20];
                       char apellido[20];
                       char fecha[10];
                       };
int main ()


{
int i=0;
int opcion;
int cont=0;
char nom[20];
char ape[20];  
a agenda[15];        
int exit;        
       printf("\n***BIENVENIDO A SU AGENDA***\n");
       printf("\nElija una Opcion.\n");
       for(i=0;i<15;i++)
       {
       
printf("\n\t[1] Ingresar un contacto.\n");
printf("\n\t[2] Ordenar contactos.\n");
printf("\n\t[3] Listar contactos.\n");
printf("\n\t[4] Salir de la agenda.\n");

printf("\n\nOpcion: ");
scanf("%d", &opcion);

switch(opcion)
{
case 1:
fflush(stdin);
printf("\nIngresar Nombre:");
   scanf("%c", &nom);
fflush(stdin);

printf("\nIngresar Apellido:");
scanf("%c", &ape);
fflush(stdin);

printf("\nIngresar fecha de nacimiento:");
gets(agenda[i].fecha);

                   fflush(stdin);
                   cont++;
                 
                 nom[i]= toupper(nom[i]);
                 ape[i] = toupper(ape[i]);
                 fflush(stdin);
                 
                  fflush(stdin);
                  strcpy(agenda[i].nombre, nom);
                  strcpy(agenda[i].apellido, ape);
                  fflush(stdin);
                   
                break;
case 2:


break;
case 3:
                    fflush(stdin);
                    printf("\nSu lista de contactos es la siguiente:\n");
                    for(i=0;i<cont;i++)
                    {

                    fflush(stdin);
                    printf("----------------------------------\n");
                    printf("%s , %s \n", agenda[i].apellido, agenda[i].nombre);
                    printf("Fecha De Nacimiento: %s\n", agenda[i].fecha);
                    printf("----------------------------------\n");
                    }
                    fflush(stdin);
break;
case 4:
             
             return EXIT_SUCCESS;

break;
default:
break;
}



}  



}

simorg

movido a Programación c++



Salu2.

rir3760

Lo primero que se debe cambiar es el nombre de los encabezados <stdio.h>, <string.h> y <ctype.h>, en C++ los nombres políticamente correctos son <cstdio>, <cstring> y <cctype>. También se debe evitar el uso de "fflush(stdin)" y gets. Por favor lee |Lo que no hay que hacer en C/C++. Nivel basico|.

Otro error sucede al presentarse el menú, este se debe colocar en un bucle que se repita hasta que el usuario seleccione la opción "Salir" mientras que tu lo tienes iterando un máximo de 15 veces.

Otro error es utilizar la variable "i" como indice de los registros ingresados cuando deberías utilizar la variable "cont".

El error mas importante se encuentra en el fragmento:
Código (cpp) [Seleccionar]
printf("\nIngresar Nombre:");
scanf("%c", &nom);
fflush(stdin);

printf("\nIngresar Apellido:");
scanf("%c", &ape);
fflush(stdin);

printf("\nIngresar fecha de nacimiento:");
gets(agenda[i].fecha);
fflush(stdin);

El problema ahí se debe al especificador utilizado: "%c" indica leer un solo carácter, para leer una palabra debes utilizar "%s".

Lo mejor en este caso es (en mi opinión, por supuesto) rescribir el programa desde cero teniendo a la mano un buen libro de C++. Puedes empezar quitando todas las funciones de C y manejando la entrada estándar con funciones como std::istream::getline.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language