Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Spinerker en 25 Octubre 2013, 20:58 pm



Título: While no lee primera vez que introduzco un numero
Publicado por: Spinerker en 25 Octubre 2013, 20:58 pm
Problema con la lectura de una variable por parte de while

Hola!

Me encuentro aprendiendo C autodidactemente y voy haciendo ejercicios que voy encontrando por ahí (Con su teoría, obviamente).

El caso es que tengo que hacer un programa que me pida números entre 1 y 5 (Y avisarle si no es así y volver a pedirle un numero) y en cuanto la suma de estos supere 21 me avise imprimiendo el numero total y el ultimo numero introducido, el programa funciona, pero el caso es que no tiene en cuenta el primer numero que le introduzco, y no consigo sacar en claro y el motivo y probablemente me este empecinando mucho y no veo el evidente error.

Aquí va el código:

#include <stdio.h>
#include <math.h>
int main(void)
{
 int num=0, resultado=0;
 printf("Dime el numero que quieres introducir (Entre 1 y 5)");
 scanf("%d", &num);

if (num > 5){
    printf("No se pueden introducir numeros mayores a 5 ni menores a 1");
    scanf("%d", &num);
    }

 while (resultado < 21)
 {

 if (num>=1 && num<=5)

     {
     scanf("%d", &num);
     resultado = resultado + num;
    
   }

 }

printf("%d, Mayor que 21...¡Te has pasado!, ultimo numero introducido %d", resultado, num);

 return 0;

}

Alguna idea?

Muchas gracias por su atención y ayuda  :D


Título: Re: While no lee primera vez que introduzco un numero
Publicado por: Cromatico en 25 Octubre 2013, 21:40 pm
Código:
 if (num>=1 && num<=5)

     {
     scanf("%d", &num);
     resultado = resultado + num;
    
   }

Primero no deberias sumar?

Saludos!


EDIT: Si comprendes esa partesita del codigo, te das cuenta que  estas pidiendo de nuevo un numero, antes de sumar el anterior :P
De todos modos suele pasar que empecinarte mucho con un problema, te aleje cada vez mas de la solucion, que en este caso era muy simple jajaja, salduos y suerte!


Título: Re: While no lee primera vez que introduzco un numero
Publicado por: Spinerker en 25 Octubre 2013, 22:16 pm
Código:
 if (num>=1 && num<=5)

     {
     scanf("%d", &num);
     resultado = resultado + num;
    
   }

Primero no deberias sumar?

Saludos!


EDIT: Si comprendes esa partesita del codigo, te das cuenta que  estas pidiendo de nuevo un numero, antes de sumar el anterior :P
De todos modos suele pasar que empecinarte mucho con un problema, te aleje cada vez mas de la solucion, que en este caso era muy simple jajaja, salduos y suerte!

Me temo que eso no ha solucionado el problema amigo, pero de todos modos me has dado una idea con la que he logrado perfeccionar el código de manera que funcione como debería con la pega de que si introduzco un numero superior a 5 lo cuenta, cosa que no quiero que suceda...

#include <stdio.h>
#include <math.h>
int main(void)
{
 int num=1, resultat=0;
printf("Dime el numero que quieres introducir (Entre 1 y 5)\n");




 while (resultat <= 21){

if (num>=1 && num<=5)

     {
     scanf("%d", &num);
     resultat = resultat + num;


   }
   else if (num > 5){
        printf("No se pueden introducir numeros mayores a 5 ni menores a 1\n");
        scanf("%d", &num);
                }

 }

printf("%d, Mayor que 21...¡Te has pasado!, ultimo numero introducido %d", resultat, num);

 return 0;

}

Detectas algún problema? quizás es sencillamente un fallo de estructura y no lo sé ver,  pero vamos que el problema reside en else if seguramente, el caso es que no tengo ni idea de que hacer con el para que funcione adecuadamente


Título: Re: While no lee primera vez que introduzco un numero
Publicado por: eferion en 26 Octubre 2013, 00:48 am
En primer lugar, acostúmbrate a etiquetar el código... al escribir un mensaje verás que hay un combobox que dice "GeSHi". Está en la parte derecha encima del combo de "Cambiar Color". Si despliegas el combo GeSHi y eliges c o c++ te aparecerán las etiquetas entre las que debes introducir tu código para que sea mínimamente legible.

En segundo lugar:

Código
  1. while (resultat <= 21)
  2. {
  3.  if (num>=1 && num<=5)
  4.  {
  5.    scanf("%d", &num);
  6.    resultat = resultat + num;
  7.  }
  8.  else if (num > 5)
  9.  {
  10.    printf("No se pueden introducir numeros mayores a 5 ni menores a 1\n");
  11.    scanf("%d", &num);
  12.  }
  13. }

Vamos a ver... este código solo te va a pedir un nuevo número si el anterior está entre 1 y 5. Si metes un 6, por ejemplo, no te va a pedir nuevos números... pero como la suma será inferior a 21 no vas a salir del bucle principal luego el programa se queda atascado.

No se por qué te has obsesionado con comprobar el valor antes de pedírselo al usuario. Con lo sencillo que es hacerlo en el orden lógico, que es el inverso. Esto es, primero pedir el dato al usuario y, después, comprobar el valor que éste ha introducido:

Código
  1. while (resultat <= 21)
  2. {
  3.  // primero le pedimos el dato al usuario
  4.  scanf("%d", &num);
  5.  
  6.  // despues hacemos las comprobaciones
  7.  if (num>=1 && num<=5)
  8.  {
  9.    resultat = resultat + num;
  10.  }
  11.  else if (num > 5)
  12.  {
  13.    printf("No se pueden introducir numeros mayores a 5 ni menores a 1\n");
  14.    // Y de paso eliminamos esta linea que sobra.
  15.    // Es codigo duplicado y nos da una pista de que algo no esta bien programado
  16.    //scanf("%d", &num);
  17.  }
  18. }