[C con Clase] (sin asunto)

Davidson, Steven srd4121 en njit.edu
Dom Nov 18 01:25:09 CET 2012


Hola Johan Manuel,

Antes todo, bienvenido a nuestra lista de correo-e y a este "mundillo"
de la programación en C++.

2012/11/17 Johan Manuel Romero Sosa <devildante666 en hotmail.com>:
> hola me gustaria que me ayudaran con este programita de acceso como
> hago que se bloquee al llegar a las 3 veces fallida la clave
>
>
> #include<stdio.h>
>
> int main(){
>     // variable local
>     int a=3456;
>     int b;
>     int c=3;
>

Recomiendo usar nombres descriptivos, como por ejemplo, 'clave';
'clave_escrita'; 'contador', 'intentos', o incluso, 'veces_fallidas'.

>     while (b!=a){

El valor guardado en 'b' no es conocido y por tanto, se considera
"basura", desde un punto de vista lógico. Deberías inicializar 'b'
para asegurar que esta comprobación sea siempre verdadera la primera
vez.

>     printf("ingrese su clave para continuar:");
>     scanf("%d",&b);
>     fflush(stdin);

Este comportamiento de 'fflush()' no es estándar, ya que sirve para
canales de salida, y no de entrada, como 'stdin'. Algunas
implementaciones de esta función sí permite el uso de 'stdin', pero no
todas.

>        if (b==3456)
>        printf("bienvenido");
>        else {
>     printf("error, %d intentos restantes\n",c);
>     c=c-1;}

Intenta acostumbrarte a usar el operador de decremento: --; esto es,

c--;

o incluso su versión prefija:

--c;

>
>    }
>     while (c==0);{

Aquí has colocado el punto y coma, indicando el final del bucle
'while'. Seguramente, no querías hacer esto.

Ten presente que estás ejecutando este bucle después de terminar el
primer bucle 'while'. Sin embargo, el primer bucle termina
exclusivamente cuando ambos valores de 'b' y de 'a' sean iguales. Esto
implica que no se tiene en cuenta la cantidad de veces fallidas.

>     printf ("cuenta bloqueada");
>     c==-1;

Esto es gramaticalmente correcto, pero no es funcional. Aquí estás
comprobando - básicamente preguntando - si 'c' es igual a -1. Sospecho
que querías restar.

>     }
>
>     getchar();
>     return 0;
>     }
>

Como tienes un problema de diseño, te doy el esquema del programa para
que te sirva de orientación:

1.  clave_escrita <- Leer_Entero_del_Teclado()
2.  Mientras que, veces_fallidas > 0  Y  clave != clave_escrita, repetir
3.      veces_fallidas <- veces_fallidas - 1
4.      clave_escrita <- Leer_Entero_del_Teclado()
5.  Si clave == clave_escrita, entonces
6.      Mostrar_en_Pantalla( "Bienvenido" )
7.  Si no, entonces
8.      Mostrar_en_Pantalla( "Cuenta Bloqueada" )
9.  Terminar.


Espero que esto te ayude.

Steven




Más información sobre la lista de distribución Cconclase