valuar caracter para opcion S/N

Iniciado por Torino10, 29 Abril 2012, 03:06 AM

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

Torino10

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...

result=cargararticulo(vecarticulos);                   
                       
                  if (result==1)
                     {
                     while ((strcmp(resp, "s")==0) || (strcmp(resp, "S")==0))
                           {
                           printf("\n\nEl articulo se guardo correctamente\n");
                           printf("%cDesea ingresar otro%c [s/n]: ", 168, 63);
                           gets(resp);
                           result=cargararticulo(vecarticulos);                   
                           }
                     }
                  else
                      {
                      printf("\n\nEl vector esta lleno\n");
                      }


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?
"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"

Torino10

Edite un poco el código para probar con un entero en lugar de char y algo funciona...

if (result==1)
                     {
                     printf("\n\nEl articulo se guardo correctamente\n");
                     printf("%cDesea ingresar otro%c [1-Si/2-No]: ", 168, 63);
                     scanf("%d", &resp);
                     while (resp==1)
                           {                           
                           result=cargararticulo(vecarticulos);                   
                           }
                     }
                  else
                      {
                      printf("\n\nEl vector esta lleno\n");
                      }


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?
"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"

s00rk

Código (cpp) [Seleccionar]
if (result==1)
                     {
                     do
                           {
                           printf("\n\nEl articulo se guardo correctamente\n");
                           printf("%cDesea ingresar otro%c [s/n]: ", 168, 63);
                           gets(resp);
                           if(strcmp(tolower(resp), "s")==0)
                               result=cargararticulo(vecarticulos);                   
                           }while((strcmp(tolower(resp), "s")==0) && result == 1);
                     }
                  else
                      {
                      printf("\n\nEl vector esta lleno\n");
                      }

Torino10

Puede solucionar el problema con un do while...
Gracias por la respuesta s00rk

do
                   {
                   result=cargararticulo(vecarticulos);
                                                         
                  if (result==1)
                     {                                                   
                     printf("\n\nEl articulo se guardo correctamente\n");
                     printf("%cDesea ingresar otro%c [1-Si/2-No]: ", 168, 63);
                     gets(resp);
                     }
                  else
                      {
                      printf("\n\nEl vector esta lleno\n");
                      strcpy(resp, "n");
                      }
                  } while ((strcmp(resp, "s")==0) || (strcmp(resp, "s")==0));


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

Saludos!
"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"

david_BS

Este tipo de validación podés comparar usando sólamente un char, que tiene equivalencia con un número ascii (entero)


char a = 'S'; // 83 en ascii

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


if( a == 's' ) { then }

if( a == 115 ) { then }

http://www.asciitable.com/


Torino10

Gracias david_BS!

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

Un abrazo! ;)
"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"

Odai

#6
 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());


Tengo demasiadas fantasías para ser una ama de casa.
Marilyn Monroe