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

Problema con strcmp

Estas en el tema de Problema con strcmp en el foro de C/C++ en Foros del Web. Hola. Estoy haciendo este programa: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original /*Un programa que sea capaz de almacenar los datos de 50 personas: nombre, dirección, ...
  #1 (permalink)  
Antiguo 03/02/2012, 10:34
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Problema con strcmp

Hola.

Estoy haciendo este programa:

Código C:
Ver original
  1. /*Un programa que sea capaz de almacenar los datos de 50 personas: nombre, dirección,
  2. teléfono, edad (usando una tabla de structs). Deberá ir pidiendo los datos uno por uno,
  3. hasta que un nombre se introduzca vacío (se pulse Intro sin teclear nada). Entonces
  4. deberá aparecer un menú que permita:
  5. o Mostrar la lista de todos los nombres.
  6. o Mostrar las personas de una cierta edad.
  7. o Mostrar las personas cuya inicial sea la que el usuario indique.
  8. o Salir del programa*/
  9.  
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13.  
  14. int main()
  15. {
  16.     struct
  17.     {
  18.     char nombre[50];
  19.     char direccion[50];
  20.     int telefono;
  21.     int edad;
  22.     }datos[50];
  23.    
  24.     int i;
  25.    
  26.    
  27.       for(i=0;i<50;i++)
  28.       {
  29.         printf("Introduce el nombre\n");
  30.         gets(datos[i].nombre);
  31.         if((strcmp(datos[i].nombre,""))==0)break;
  32.         printf("Introduce la direccion");
  33.         gets(datos[i].direccion);
  34.         printf("Introduce el telefono");
  35.         scanf("%d",&datos[i].telefono);
  36.         printf("Introduce la edad");
  37.         scanf("%d",&datos[i].edad);
  38.        
  39.       }
  40.    
  41.     system("pause");
  42.     return 0;
  43. }

El problema que tengo es que en el bucle for, cuando i=0, me coge bien el strcmp; es decir, si tecleo intro cuando me pide el nombre sin poner nada, sale del bucle for. Pero cuando i es 1, directamente se cierra, sin que pueda escribir yo nada.

Por ejemplo, si el programa me pone

Introduce tu nombre - yo pongo intro - se cierra el programa
Eso está bien.
Pero si pongo:

Introduce el nombre - 1
Dirección - 2
Teléfono - 3
Edad - 4
Ahora me tendría que pedir otro nombre. Pues no; sino que me imprime por pantalla "Introduce el nombrePulse una tecla para continuar"...

Gracias.

Saludos.
  #2 (permalink)  
Antiguo 03/02/2012, 10:47
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Problema con strcmp

tiene que limpiar el buffer de lectura antes de leer de nuevo. el gets lee hasta una linea nueva y como el scanf de edad leyo el numero pero dejo el caracter de linea nueva al tocar enter el gets lee "nada".

un metodo casero puede ser despues de leer la edad poner esto:

while(getchar() != '\n');
  #3 (permalink)  
Antiguo 03/02/2012, 10:51
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con strcmp

Muchísimas gracias, no había caído en eso.
EDITO:

Sé que while(getchar() != '\n'); hace que vaya bien, pero no sé por qué... ¿getchar no era una forma de cerrar el programa?

Gracias.
  #4 (permalink)  
Antiguo 03/02/2012, 11:03
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Problema con strcmp

getchar sirver para leer un caracter del buffer de lectura....ese while lo que hace es consumir el buffer hasta que aparesca un caracter de nueva linea. El cual es tambien consumido.
  #5 (permalink)  
Antiguo 03/02/2012, 11:05
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema con strcmp

Ah, muchísimas gracias. Ya lo he entendido.

Etiquetas: programa, strcmp, string, struct
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 22:15.