Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Torino10 en 29 Abril 2012, 03:06 am



Título: valuar caracter para opcion S/N
Publicado por: Torino10 en 29 Abril 2012, 03:06 am
Hola!

Tengo problemas a la hora de evaluar un caracter que se captura para ver que opción realizar...

Lo que quiero realizar es que después de realizada una acción (cargo valores en un vector de tipo struct), quiero preguntarle al usuario si desea volver a cargar valores...
El código es este...

Código
  1. result=cargararticulo(vecarticulos);                    
  2.  
  3.                  if (result==1)
  4.                     {
  5.                     while ((strcmp(resp, "s")==0) || (strcmp(resp, "S")==0))
  6.                           {
  7.                           printf("\n\nEl articulo se guardo correctamente\n");
  8.                           printf("%cDesea ingresar otro%c [s/n]: ", 168, 63);
  9.                           gets(resp);
  10.                           result=cargararticulo(vecarticulos);                    
  11.                           }
  12.                     }
  13.                  else
  14.                      {
  15.                      printf("\n\nEl vector esta lleno\n");
  16.                      }

Primero llamo a la funcion "cargararticulos" la cual se encarga de realizar la carga en el vector y me devuelve 1 si se cargo correctamente o -1 si el vector esta lleno...
Por eso a ese valor lo guardo en una variable "result" y despues pregunto por ella si tomo valor 1, para despues enviar el msj por si se quiere cargar otro articulo...
guardo "s" o "n" dependiendo lo que se ingrese y no deberia volver a entrar al while una vez que ingrese "n"

Alguna solucion?


Título: Re: valuar caracter para opcion S/N
Publicado por: Torino10 en 29 Abril 2012, 03:18 am
Edite un poco el código para probar con un entero en lugar de char y algo funciona...

Código
  1. if (result==1)
  2.                     {
  3.                     printf("\n\nEl articulo se guardo correctamente\n");
  4.                     printf("%cDesea ingresar otro%c [1-Si/2-No]: ", 168, 63);
  5.                     scanf("%d", &resp);
  6.                     while (resp==1)
  7.                           {                          
  8.                           result=cargararticulo(vecarticulos);                    
  9.                           }
  10.                     }
  11.                  else
  12.                      {
  13.                      printf("\n\nEl vector esta lleno\n");
  14.                      }

El  problema es que dentro del while deberia volver a preguntar por la respuesta que dio la funcion...
Es decir 1 si se guardo correctamente o -1 si el vector esta lleno...

Eso es lo que me confunde. Alguna idea de como lo podria hacer?


Título: Re: valuar caracter para opcion S/N
Publicado por: s00rk en 29 Abril 2012, 03:44 am
Código
  1. if (result==1)
  2.                     {
  3.                     do
  4.                           {
  5.                           printf("\n\nEl articulo se guardo correctamente\n");
  6.                           printf("%cDesea ingresar otro%c [s/n]: ", 168, 63);
  7.                           gets(resp);
  8.                           if(strcmp(tolower(resp), "s")==0)
  9.                               result=cargararticulo(vecarticulos);                    
  10.                           }while((strcmp(tolower(resp), "s")==0) && result == 1);
  11.                     }
  12.                  else
  13.                      {
  14.                      printf("\n\nEl vector esta lleno\n");
  15.                      }


Título: Re: valuar caracter para opcion S/N
Publicado por: Torino10 en 29 Abril 2012, 03:49 am
Puede solucionar el problema con un do while...
Gracias por la respuesta s00rk

Código
  1. do
  2.                   {
  3.                   result=cargararticulo(vecarticulos);
  4.  
  5.                  if (result==1)
  6.                     {                                                    
  7.                     printf("\n\nEl articulo se guardo correctamente\n");
  8.                     printf("%cDesea ingresar otro%c [1-Si/2-No]: ", 168, 63);
  9.                     gets(resp);
  10.                     }
  11.                  else
  12.                      {
  13.                      printf("\n\nEl vector esta lleno\n");
  14.                      strcpy(resp, "n");
  15.                      }
  16.                  } while ((strcmp(resp, "s")==0) || (strcmp(resp, "s")==0));

No conocia la funcion "tolower" y la voy a agregar al codigo!

Saludos!


Título: Re: valuar caracter para opcion S/N
Publicado por: david_BS en 29 Abril 2012, 17:21 pm
Este tipo de validación podés comparar usando sólamente un char, que tiene equivalencia con un número ascii (entero)

Código:
char a = 'S'; // 83 en ascii

a=tolower(a); // pasa a ser 115

Código:
if( a == 's' ) { then }

Código:
if( a == 115 ) { then }

http://www.asciitable.com/



Título: Re: valuar caracter para opcion S/N
Publicado por: Torino10 en 29 Abril 2012, 21:15 pm
Gracias david_BS!

No podia poner en funcionamiento la funcion tolower(), ahora si entendi como funciona.

Un abrazo! ;)


Título: Re: valuar caracter para opcion S/N
Publicado por: Odai en 30 Abril 2012, 16:33 pm
 en el while... utliza
while(resp!='n')
{
...
}
y qita el gets eso se utliza para una cadena de caracteres, y solo lees uno, intenta con
resp=tolower(getchar());