Programación General > C/C++
Problema con bucle.
Aprendiz21Sam:
Hola, tengo un problema con este bucle que no me funciona.
Este es el programa. Entro en el bucle y me pregunta el número. Se lo doy y me da el símbolo, hasta ahí todo bien. Entonces me pregunta que si quiero pulse S para salir, pero no me da la opción de pulsar nada, sino que se salta el scanf ("%c", &Salir); y vuelve a entrar en el bucle. También he probado el while y no funciona, es decir, he probado a poner el valor de salir directamente en 'S' y sigue entrando. ¿Alguna explicación? Gracias de antemano.
--- Código: C ---/*Bibliotecas de C*/ #include <stdio.h>#include <conio.h> /*Cabecera de las funciones*/ /*Programa pincipal*/int main(){ /*Variables del programa principal*/ int Letra; char A; char Salir; /*Valor de las variables*/ /*Petición de datos*/ while (Salir != 's' or Salir != 'S') { printf ("nEscriba un numero para determinar su simbolo: "); scanf ("%d", &Letra); A = Letra; printf ("n%d = %c", Letra, A); printf ("nPulse 'S' para salir u otra tecla para poner otro numero: "); scanf ("%c", &Salir); } /*Algoritmo principal*/ /*Salida de datos*/ /*Otros*/ getch(); return 0;}
Eternal Idol:
Cualquier caracter sera diferente de S o (or, o || en C/C++) diferente de s. Lo que queres es que el bucle se ejecute mientras Salir no sea NINGUNO de los dos, es decir que sea diferente de S Y diferente de s.
--- Código: Text ---while (Salir != 's' && Salir != 'S')
Aprendiz21Sam:
Sigo teniendo un problemilla. El while ahora si funciona, pero el bucle en si no, porque no me deja escribir el valor de "Salir.
--- Código: C --- while (Salir != 's' && Salir != 'S') { printf ("nEscriba un numero para determinar su simbolo: "); scanf ("%d", &Letra); A = Letra; printf ("n%d = %c", Letra, A); printf ("nPulse 'S' para salir u otra tecla para poner otro numero: "); scanf ("%c", &Salir); }
El último scanf no se ejecuta nunca.
Gracias de antemano.
Eternal Idol:
scanf es veneno, reemplazarlo por fgets + sscanf suele solucionar todos los problemas.
--- Código: C ---/*Bibliotecas de C*/#include <stdio.h> /*Cabecera de las funciones*/ /*Programa pincipal*/int main(){ /*Variables del programa principal*/ int Letra; char A; char Salir = 'n'; char cad[80]; /*Valor de las variables*/ /*Petición de datos*/ while (Salir != 's' && Salir != 'S') { printf ("nEscriba un numero para determinar su simbolo: "); fgets(cad, sizeof(cad), stdin); sscanf (cad, "%d", &Letra); A = Letra; printf ("n%d = %c", Letra, A); printf ("nPulse 'S' para salir u otra tecla para poner otro numero: "); fgets(cad, sizeof(cad), stdin); sscanf (cad, "%c", &Salir); } /*Algoritmo principal*/ /*Salida de datos*/ /*Otros*/ getchar(); return 0;}
Aprendiz21Sam:
Vaya gracias. Ahora si funciona pero tengo algunas dudas.
Veras yo utilizo muy pocos recursos para hacer programas con los que debería usar otros recursos. Por ejemplo, para un número aleatorio no utilizo las funciones de rand, etc. Lo que sí me gustaría saber es por qué no funcionaba mi "scanf ("%c", Salir);".
Gracias de antemano.
Navegación
[#] Página Siguiente
Ir a la versión completa