• Domingo 15 de Diciembre de 2024, 03:07

Autor Tema:  Problema con comparaciones de letras  (Leído 1865 veces)

xiroux

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema con comparaciones de letras
« en: Viernes 11 de Julio de 2008, 10:26 »
0
Hola :hola: !!! Soy nuevo por este foro y tambien nuevo en esto de la programacion del C. Estoy aprendiendo este lenguaje con un curso que encontre en Internet y ahora que me surje un problemilla que no consigo resolver  :argh:  preciso de vuestra ayuda!!! A ver, os comento, estoy haciendo un ejercicio del curso este que dice asi:

Un programa que sea capaz de almacenar los datos de 50 personas: nombre, dirección,
teléfono, edad (usando una tabla de structs). Deberá ir pidiendo los datos uno por uno,
hasta que un nombre se introduzca vacío (se pulse Intro sin teclear nada). Entonces
deberá aparecer un menú que permita:
1.- Mostrar la lista de todos los nombres.
2.- Mostrar las personas de una cierta edad.
3.- Mostrar las personas cuya inicial sea la que el usuario indique.
4.- Salir del programa
(lógicamente, este menú debe repetirse hasta que se escoja la opción de “salir”).

Pues me estaba saliendo todo bien y creia que lo tenia todo perfecto cuando lo compile y al probar la opcion 3 no consigo hacer que salgan los nombres cuya inicial sea la letra que el usuario indique. He estado probando y sale cuando escribo la letra detras de otras dos, es decir, escribo por ejemplo "dfa" y me salen los nombres que empiezan por a. No se por qué lee el tercer caracter y no el primero solo. Aqui os dejo el codigo entero a ver si me podeis aconsejar mas o menos la forma. He resaltado en negrita donde tengo el problema:

Código: Text
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. struct {
  5.        char nombre[60], direccion[100];
  6.        int tlfno;
  7.        int edad;
  8.        }usuario[50];
  9. char temp[11], letra;
  10. int i, opcion, j, edad;
  11. main()
  12. {
  13.       for (i=0; i<50; i++)
  14.           {
  15.           printf("Escriba su nombre completo: ");
  16.          
  17.           gets(usuario[i].nombre);
  18.           if (strcmp (usuario[i].nombre, "")==0) break;
  19.           printf("nEscriba su direccion: ");
  20.           gets(usuario[i].direccion);
  21.           printf("nEscriba su telefono: ");
  22.           gets(temp);
  23.           sscanf(temp, "%d", &usuario[i].tlfno);
  24.           printf("nEscriba su edad: ");
  25.           gets(temp);
  26.           sscanf(temp, "%d", &usuario[i].edad);
  27.           }
  28.       do
  29.           {
  30.           printf("nnnEscoja una opcion:n");
  31.           printf("1.-Mostrar la lista de todos los nombres.n");
  32.           printf("2.-Mostrar las personas de la edad que se indique.n");
  33.           printf("3.-Mostrar las personas cuyo nombre empiece con la letra que se indique.n");
  34.           printf("4.-Salir del programan");
  35.           scanf("%d", &opcion);
  36.           switch (opcion)
  37.                  {
  38.                  case 1:/*Muestra todos los nombres*/
  39.                         for (j=0; j<=i; j++)
  40.                             printf("%sn", usuario[j].nombre);
  41.                         system("pause");
  42.                         break;
  43.                  case 2:/*Muestra las personas de una cierta edad*/
  44.                         printf("nEscriba la edad que tienen las personas que quiere ver: ");
  45.                         scanf("%d", &edad);
  46.                         for (j=0; j<=i; j++)
  47.                             if (usuario[j].edad==edad) printf("%sn", usuario[j].nombre);
  48.                         system("pause");
  49.                         break;
  50.                  [b]case 3:/*Muestra las personas con la inicial que se indique*/[/b]
  51.                         [b]printf("Escriba la inicial: ");[/b]
  52.                         [b]scanf("%c", &letra);[/b]
  53.                         [b]for (j=0; j<=i; j++)[/b]
  54.                            [b] if (letra==usuario[j].nombre[0]) printf("n%s", usuario[j].nombre);[/b]
  55.                         [b]system("pause");[/b]
  56.                         [b]break;[/b]
  57.  
  58.                  case 4:/*Sale del programa*/
  59.                         printf("Fin del programa, pulse Intro para cerrar");
  60.                         getchar();
  61.                         getchar();
  62.                         break;
  63.                  }
  64.           }
  65.           while (opcion!=4);
  66.      
  67. }
  68.  

Espero que lo que he hecho no sea demasiada barbaridad  :blink:  :blink: y que me podais guiar un poquito, no os pido que me lo resolvais, solo que me aconsejeis  ^_^  ^_^ Gracias!!!!

AnimaSubtilis

  • Miembro MUY activo
  • ***
  • Mensajes: 172
  • Nacionalidad: co
    • Ver Perfil
Re: Problema con comparaciones de letras
« Respuesta #1 en: Viernes 11 de Julio de 2008, 15:41 »
0
Bienvenido al foro...xirous :beer:

Mire probe el codigo y todo bien y por alguna extraña razon no me sirve la opcion 3....

scanf("%c"&letra);...es como si no la tomara y siguiera derecho....

probe de la siguiente manera y funciono a la perfeccion

Código: Text
  1. case 3:/*Muestra las personas con la inicial que se indique*/
  2.                         printf("Escriba la inicial: ");
  3.                         letra=getche();//en lugar de scanf
  4.                         for (j=0; j<=i; j++)
  5.                             if (letra==usuario[j].nombre[0]) printf("n%s", usuario[j].nombre);
  6.                         system("pause");
  7.                         break;
  8.  

getche trabaja con la libreria conio.h para que lo pruebe....espero que sirva...
A menudo unas pocas horas de «prueba y ensayo» podrán ahorrarte minutos de leer manuales.
[size=150]
Dios nos Otorgo el uno y el cero....y con eso creamos un universo....[/size]

[size=109]↑°°°°ÄNÍMÄ §ÛBTÍLͧ°°°°↓[/size]


xiroux

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema con comparaciones de letras
« Respuesta #2 en: Viernes 11 de Julio de 2008, 20:19 »
0
Muchísimas gracias, me va a la perfección, tendré que leer algo sobre esta librería y ver cuáles son las funciones que aporta y asi avanzar un poquito más en mi aprendizaje. Gracias por prestarme un poquito de tu tiempo  ^_^  Hasta otra!