[SOLUCIONADO] Ayuda C++ codigo con do-while y if para insertar PIN

Iniciado por ian007lol, Noviembre 22, 2019, 12:29:43 PM

Tema anterior - Siguiente tema

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

Noviembre 22, 2019, 12:29:43 PM Ultima modificación: Noviembre 23, 2019, 05:31:03 PM por Gabriela
Este es mi primer año estudiando programación y he querido hacer un pequeño programa para que al ingresar un PIN concreto me de información del tema al cual está
relacionado. He intentado hacerlo de manera que al ingresar un PIN que no esté definido, simplemente salga de nuevo "Inserta el Pin:", el problema es que al hacerlo como lo he hecho, me repite "Inserta el Pin:" sin importar el PIN que ingrese.
Me sería de gran ayuda si me dicen que es lo que he hecho mal y como lo puedo solucionar.

Código: cpp
#include "stdafx.h"



int main()
{
const int Nina = 2403;
const int Escuela = 1234;
const int Adam = 131199;
const int Antonio = 201066;
const int Ian = 240702;
const int Cristina = 221167;

int Pin;


do
{
printf("Inserta el Pin:");
        scanf_s("%i", &Pin);
} while (Pin!=Ian || Pin!=Adam || Pin!=Antonio || Pin!=Cristina || Pin!=Escuela || Pin!=Nina);

if (Pin==Ian)
{
printf("Joven programador el cual aprecia los videojuegos y la eficiencia ante todo. Su mejor amigo se llama oliver\n");
}
if (Pin==Nina)
{
printf("Nina. La gata de la familia. A veces cariñosa, a veces antipatica\n");
}
if (Pin==Escuela)
{
printf(" Es un Technisches Gymnasium con varias especializaciones. Ian acude a esta instalacion\n");
}
if (Pin==Adam)
{
printf("Joven cocinero el cual aprecia los videojuegos y la cocina ante todo. No tiene amigos ya que se los comio\n");
}
if (Pin==Antonio)
{
printf("Conductor de autobuses experimentado el cual aprecia la familia y los amigos. El conocimiento es poder. \n");
}
if (Pin==Cristina)
{
printf("Ama de casa la cual ama a su familia y a sus seres queridos. El amor prevalecera\n");
}

    return 0;
}

Hola @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta !

Para este tipo de situaciones podrias utilizar una variable que tenga un 1 o un 0 (nose si en C++ hay booleans asique lo hare con 1 y 0 en C que seguro podes traducir)

Código: c


.     const int Nina = 2403;
.     const int Escuela = 1234;
.     const int Adam = 131199;
.     const int Antonio = 201066;
.     const int Ian = 240702;
.     const int Cristina = 221167;
.
.     int Pin;
.     int valido = 0;
.
.     while(valido == 0) {
.         System("cls");
.         printf("\nInserta el Pin..: ");
.         scanf("%d", &Pin);
.         valido = validarPin(Pin);
.     }
.
.     int validarPin(pin) {
.         pinValido = 0;
.         switch (pin):
.               case Nina:
.                     pinValido = 1;
.                     break;
.           case Escuela:
.                     pinValido = 1;
.                     break;
.           case Cristina:
.                     pinValido = 1;
.                     break;
.           case Antonio:
.                     pinValido = 1;
.                     break;
.           case Adam:
.                     pinValido = 1;
.                     break;
. .         case Iam:
.                   pinValido = 1;
.                   break;
.           default:
.               pinValido = 0;
.               break;
.
.     return pinValido;
. }



No creo que este codigo compile, pero te da una idea de por donde ir.
Lo que hicimos es llevar toda la concición que estaba dentro del while a una función para que el codigo sea mas legible y al mismo tiempo que puedas reutilizar esa validación cada vez que la necesites sin escribir if... if... if...

Aclaracion, dentro de la función puedes utilizar las variables que fueron definidas arriba porque estan como constantes en un scope global, si no hubiera sido asi, deberias haberlas definido dentro de la misma función.

Espero haberte ayudado, Saludos !




Con la fuerza del mar, con la paz del rio


gracias por la ayuda, aún así con mi nivel no se que hacen "break" "default" "case" o "switch", todavía no lo estudié. Aún así me puedo imaginar lo que hacen pero de todas formas, aún con la ayuda que me diste, no se hacer que el programa funcione. Muchas gracias de todas formas por tu tiempo.

Noviembre 22, 2019, 10:15:28 PM #3 Ultima modificación: Noviembre 22, 2019, 10:18:28 PM por DtxdF
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No sé si esto le sirva; Modifiqué un poco de su código, sin usar "case", "default", "switch", aunque sí usé "break", le digo que sólo es para salir del bucle. Nada paranormal.

Código: cpp
#include <stdio.h>
#define True 1

int main(void)
{
    const int Nina = 2403;
    const int Escuela = 1234;
    const int Adam = 131199;
    const int Antonio = 201066;
    const int Ian = 240702;
    const int Cristina = 221167;

    int Pin;

    while (True) {
   
    printf("Ingresé el susodicho Pin:\n");
    scanf("%i", &Pin);

    if (Pin == Ian) {
   
    printf("Joven programador el cual aprecia los videojuegos y la eficiencia ante todo. Su mejor amigo se llama oliver\n");
   
    } else if (Pin == Nina) {
   
    printf("Nina. La gata de la familia. A veces cariñosa, a veces antipatica\n");
   
    } else if (Pin == Escuela) {
   
    printf("Es un Technisches Gymnasium con varias especializaciones. Ian acude a esta instalacion\n");
   
    } else if (Pin == Adam) {
   
    printf("Joven cocinero el cual aprecia los videojuegos y la cocina ante todo. No tiene amigos ya que se los comio\n");
   
    } else if (Pin == Antonio) {
   
    printf("Conductor de autobuses experimentado el cual aprecia la familia y los amigos. El conocimiento es poder. \n");
   
    } else if (Pin == Cristina) {
   
    printf("Ama de casa la cual ama a su familia y a sus seres queridos. El amor prevalecera\n");
   
    } else {

    printf("¡Debe ingresar un valor válido para poder continuar!\n");
    continue;

    }

    break;

    }
   
    return 0;

}


- DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Pues es buena la idea de bartz. Solo agregar que si existe el bool true or false.

Que los case si hacen lo mismo puedes agruparlos así:

Case Opcion1:
Case Opcion2:
Case Pepito:
  Variable=true;
Break;

Y si anda en C seguramente no tenga problemas en C++. C++ es una extension de C. No así como C# que ya es otra cosa distinta.

Bartz usa el while en lugar de do while pues en este caso se puede usar el do while pero ya me parece cuestion de gustos y prolijidad ya que no tenemos performance en requerimientos.



Noviembre 23, 2019, 02:21:11 PM #6 Ultima modificación: Noviembre 23, 2019, 02:29:38 PM por Kirari
Bueno, modificando un poco el código que hizo @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, acá le dejo la versión sin break, son equivalentes, pero quería aportar  ;D

Código: cpp

#include <stdio.h>


int main(void)
{

    const int Nina = 2403;
    const int Escuela = 1234;
    const int Adam = 131199;
    const int Antonio = 201066;
    const int Ian = 240702;
    const int Cristina = 221167;

    int Pin;

    bool salir = false;

    printf("Si desea salir, ingrese 0.\n");

    printf("Ingrese Pin: ");
    scanf("%i", &Pin);

    while ((Pin!=0) && (salir!=true)) 
    {
        while ((Pin!=0) && (Pin!=Nina) && (Pin!=Escuela) && (Pin!=Adam) && (Pin!=Antonio) && (Pin!=Ian) && (Pin!=Cristina))
        {
            printf("¡Debe ingresar un valor válido para poder continuar!\n");
            printf("Si desea salir, ingrese 0.\n");
            printf("Ingrese Pin: ");
            scanf("%i", &Pin);
        }

        if ((Pin==0) && (salir==false))
        {
            salir = true;
        }

        else
        {
            if (Pin == Ian) {
                   
                printf("Joven programador el cual aprecia los videojuegos y la eficiencia ante todo. Su mejor amigo se llama oliver\n");
                   
            } else if (Pin == Nina) {
                   
                 printf("Nina. La gata de la familia. A veces cariñosa, a veces antipatica\n");
                   
            } else if (Pin == Escuela) {
                   
                 printf("Es un Technisches Gymnasium con varias especializaciones. Ian acude a esta instalacion\n");
                   
            } else if (Pin == Adam) {
                   
                printf("Joven cocinero el cual aprecia los videojuegos y la cocina ante todo. No tiene amigos ya que se los comio\n");
                   
            } else if (Pin == Antonio) {
                   
                printf("Conductor de autobuses experimentado el cual aprecia la familia y los amigos. El conocimiento es poder. \n");
                   
            } else if (Pin == Cristina) {
                   
                printf("Ama de casa la cual ama a su familia y a sus seres queridos. El amor prevalecera\n");
                   
            }

            printf("Si desea salir, ingrese 0.\n");
            printf("Ingrese Pin: ");
            scanf("%i", &Pin);       
        }
     
    }

   
    return 0;

}



Saludos!
Kirari-

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
gracias por la ayuda, aún así con mi nivel no se que hacen "break" "default" "case" o "switch", todavía no lo estudié.

Disculpa por no explicarlo, lo que hace el "Switch" es analizar una variable y asignarsela a una de las opciones que tiene en los "case"

"En caso de que (variable) sea igual a:
         case(Fernando):
                 Ejecuta este codigo
         case(Maria):
                 Ejecuta este codigo
         default: (Osea si no coincide con ninguna)
                 Ejecuta este codigo

En la practica se usa mucho para hacer un menu por ejemplo y darle opciones, entonces en el switch pones 1 2 3 4 o en el caso de que tengas que analizar muchas posibilidades de una misma variable.

Te dejo este link para que puedas verlo en detalle
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos !




Con la fuerza del mar, con la paz del rio