elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problemas con dev c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problemas con dev c++  (Leído 1,959 veces)
sebatoyo

Desconectado Desconectado

Mensajes: 1


Ver Perfil
problemas con dev c++
« en: 28 Agosto 2013, 07:32 am »

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
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <conio.h>
  5. #include <iostream>
  6.  
  7.  
  8. typedef struct a        {
  9.                        char nombre[20];
  10.                        char apellido[20];
  11.                        char fecha[10];
  12.                        };
  13. int main ()
  14.  
  15.  
  16. {
  17. int i=0;
  18. int opcion;
  19. int cont=0;
  20. char nom[20];
  21. char ape[20];  
  22. a agenda[15];        
  23. int exit;        
  24.        printf("\n***BIENVENIDO A SU AGENDA***\n");
  25.        printf("\nElija una Opcion.\n");
  26.        for(i=0;i<15;i++)
  27.        {
  28.  
  29. printf("\n\t[1] Ingresar un contacto.\n");
  30. printf("\n\t[2] Ordenar contactos.\n");
  31. printf("\n\t[3] Listar contactos.\n");
  32. printf("\n\t[4] Salir de la agenda.\n");
  33.  
  34. printf("\n\nOpcion: ");
  35. scanf("%d", &opcion);
  36.  
  37. switch(opcion)
  38. {
  39. case 1:
  40. fflush(stdin);
  41. printf("\nIngresar Nombre:");
  42.    scanf("%c", &nom);
  43. fflush(stdin);
  44.  
  45. printf("\nIngresar Apellido:");
  46. scanf("%c", &ape);
  47. fflush(stdin);
  48.  
  49. printf("\nIngresar fecha de nacimiento:");
  50. gets(agenda[i].fecha);
  51.  
  52.                    fflush(stdin);
  53.                    cont++;
  54.  
  55.                  nom[i]= toupper(nom[i]);
  56.                  ape[i] = toupper(ape[i]);
  57.                  fflush(stdin);
  58.  
  59.                   fflush(stdin);
  60.                   strcpy(agenda[i].nombre, nom);
  61.                   strcpy(agenda[i].apellido, ape);
  62.                   fflush(stdin);
  63.  
  64.                 break;
  65. case 2:
  66.  
  67.  
  68. break;
  69. case 3:
  70.                     fflush(stdin);
  71.                     printf("\nSu lista de contactos es la siguiente:\n");
  72.                     for(i=0;i<cont;i++)
  73.                     {
  74.  
  75.                     fflush(stdin);
  76.                     printf("----------------------------------\n");
  77.                     printf("%s , %s \n", agenda[i].apellido, agenda[i].nombre);
  78.                     printf("Fecha De Nacimiento: %s\n", agenda[i].fecha);
  79.                     printf("----------------------------------\n");
  80.                     }
  81.                     fflush(stdin);
  82. break;
  83. case 4:
  84.  
  85.              return EXIT_SUCCESS;
  86.  
  87. break;
  88. default:
  89. break;
  90. }
  91.  
  92.  
  93.  
  94. }  
  95.  
  96.  
  97.  
  98. }


« Última modificación: 1 Septiembre 2013, 23:15 pm por simorg » En línea

simorg
Ex-Staff
*
Desconectado Desconectado

Mensajes: 8.302



Ver Perfil
Re: problemas con dev c++
« Respuesta #1 en: 1 Septiembre 2013, 23:17 pm »

movido a Programación c++



Salu2.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problemas con dev c++
« Respuesta #2 en: 2 Septiembre 2013, 03:37 am »

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
  1. printf("\nIngresar Nombre:");
  2. scanf("%c", &nom);
  3. fflush(stdin);
  4.  
  5. printf("\nIngresar Apellido:");
  6. scanf("%c", &ape);
  7. fflush(stdin);
  8.  
  9. printf("\nIngresar fecha de nacimiento:");
  10. gets(agenda[i].fecha);
  11. 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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines