elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con bucle while
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con bucle while  (Leído 3,993 veces)
juntacadaveres

Desconectado Desconectado

Mensajes: 76



Ver Perfil
Problema con bucle while
« en: 12 Junio 2020, 20:24 pm »



Se supone que debe pedir al usuario la contraseña hasta que escriba la correcta pero no hace una pausa para que se pueda introducir la contraseña

se sala la sentencia scanf


MOD: Imagen redimensionada al tamaño permitido


« Última modificación: 9 Julio 2020, 16:17 pm por YreX-DwX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Problema con bucle while
« Respuesta #1 en: 12 Junio 2020, 20:43 pm »

Seguramente ese error aparezca solo al introducir caracteres alfabéticos (letras).
Esto sucede porque lo estás intentando guardar como un entero.

Si quieres aceptar cualquier entrada de caracteres tendrás que usar fgets() y recoger la entrada como una cadena de caracteres y luego ya manejarlo a tu manera: convirtiendo la clave en cadena o convirtiendo la entrada en número (comprobando claro que son caracteres numéricos).

Otro tema aparte es el uso de fflush(stdin) para limpiar el buffer de entrada. Esta función fue diseñada para limpiar el buffer de salida fflush(stdout) y no está hecha para el de entrada. Para limpiar el buffer de entrada utiliza otras opciones como:
Código
  1. while(getchar() != '\n');

Puedes aprovechar el código anterior para limpiar el buffer en caso de introducir caracteres. También se corregirá tu problema sin tener que usar fgets().

Suerte. :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema con bucle while
« Respuesta #2 en: 14 Junio 2020, 16:03 pm »

Seguramente capturas el '\n' de la tecla INTRO. Hay mucha documentación sobre esto, tanto en el foro como en la internet.
En línea

EmaTomA

Desconectado Desconectado

Mensajes: 4



Ver Perfil
Re: Problema con bucle while
« Respuesta #3 en: 9 Julio 2020, 12:46 pm »



Aqui tienes la solucion a tu problema  ;D


MOD: Imagen redimensionada al tamaño permitido
« Última modificación: 9 Julio 2020, 16:16 pm por YreX-DwX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Problema con bucle while
« Respuesta #4 en: 9 Julio 2020, 16:44 pm »



Aqui tienes la solucion a tu problema  ;D


MOD: Imagen redimensionada al tamaño permitido

Te sugiero los siguientes cambios para ese código:
  • No utilizar fflush(stdin) para limpiar el buffer de entrada. Ya lo comenté en el otro mensaje.
  • No utilizar funciones de adorno como system("cls"). Además del gasto de recursos que conlleva hacer llamadas al sistema, al incluir un comando propio del sistema operativo, el programa pierde portabilidad (una forma de mantener la portabilidad es incluir muchos saltos de línea para limpiar la pantalla)
  • No utilizar system("pause") para hacer la pausa final. En C se recomienda usar getchar() (de <stdio.h>) y en C++, cin.get() (de <iostream>).
  • La implementación del bucle no me parece la mejor... Un condicional con un do-while() infinito dentro que tiene un break dentro de otro condicional para salir...

Mi solución, con las recomendaciones anteriores sería:
Código
  1. #include <stdio.h>
  2.  
  3. const int CLAVE = 123;
  4.  
  5. int main(){
  6.    int clave_usuario;
  7.    int clave_correcta; // se puede usar bool incluyendo la cabecera <stdbool.h>
  8.    do {
  9.        printf("Introduce la contrasena: ");
  10.        scanf("%d", &clave_usuario);
  11.        while(getchar() != '\n'); // limpieza de buffer
  12.        clave_correcta = (CLAVE == clave_usuario);
  13.        if(!clave_correcta) {
  14.            printf("** La contrasena es incorrecta **\n");
  15.        }
  16.    while(!clave_correcta);
  17.    printf("** La contrasena es correcta **\n");
  18.    getchar(); // pausa para que no se cierre la consola si se ejecuta el exe directamente
  19.    return 0;
  20. }

PD: Los códigos mejor entre etiquetas de Código GeSHi  :rolleyes:
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema con bucle while
« Respuesta #5 en: 9 Julio 2020, 17:53 pm »

El usuario que abrio el hilo ya no volvio asi que ya es suficiente. Y en general por favor tratemos de no dejar soluciones completas.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,272 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
Problema Bucle C
Programación C/C++
P.AGCD 4 3,662 Último mensaje 12 Julio 2011, 02:33 am
por rir3760
Como frenar un bucle for con un bucle while en bash linux
Scripting
mario290386 0 2,056 Último mensaje 5 Mayo 2019, 13:58 pm
por mario290386
problema en c# exepcion bucle for
.NET (C#, VB.NET, ASP)
ismaelson 2 3,216 Último mensaje 14 Febrero 2021, 21:11 pm
por ismaelson
MOVIDO: problema en c# exepcion bucle for
Programación C/C++
Eternal Idol 0 1,974 Último mensaje 13 Febrero 2021, 17:31 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines