Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: ian007lol en Noviembre 22, 2019, 12:29:43 PM

Título: [SOLUCIONADO] Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: ian007lol en Noviembre 22, 2019, 12:29:43 PM
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) [Seleccionar]
#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;
}
Título: Re:Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: Bartz en Noviembre 22, 2019, 06:23:58 PM
Hola @ian007lol (https://underc0de.org/foro/index.php?action=profile;u=97167) !

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)



.     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 !
Título: Re:Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: ian007lol en Noviembre 22, 2019, 07:18:57 PM
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.
Título: Re:Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: DtxdF en Noviembre 22, 2019, 10:15:28 PM
@ian007lol (https://underc0de.org/foro/index.php?action=profile;u=97167)

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) [Seleccionar]
#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
Título: Re:Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: Solid Water en Noviembre 23, 2019, 05:19:38 AM
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.

Título: Re:Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: ian007lol en Noviembre 23, 2019, 01:11:43 PM
muchisimas gracias, de verdad me ayudó.
Título: Re:Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: ??????? en Noviembre 23, 2019, 02:21:11 PM
Bueno, modificando un poco el código que hizo @DtxdF (https://underc0de.org/foro/index.php?action=profile;u=71723), acá le dejo la versión sin break, son equivalentes, pero quería aportar  ;D

Código (cpp) [Seleccionar]

#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-
Título: Re:[SOLUCIONADO] Ayuda C++ codigo con do-while y if para insertar PIN
Publicado por: Bartz en Noviembre 25, 2019, 08:52:42 PM
No tienes permitido ver enlaces. Registrate o Entra a tu 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
https://www.tutorialspoint.com/cplusplus/cpp_switch_statement.htm

Saludos !