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?
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?
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");
}
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!
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/
Gracias david_BS!
No podia poner en funcionamiento la funcion tolower(), ahora si entendi como funciona.
Un abrazo! ;)
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());