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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  While no lee primera vez que introduzco un numero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: While no lee primera vez que introduzco un numero  (Leído 1,676 veces)
Spinerker

Desconectado Desconectado

Mensajes: 4


Pequeño aprendiz, espero ser un gran maestro.


Ver Perfil
While no lee primera vez que introduzco un numero
« 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


En línea

Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: While no lee primera vez que introduzco un numero
« Respuesta #1 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!


« Última modificación: 25 Octubre 2013, 21:47 pm por Cromatico » En línea

Spinerker

Desconectado Desconectado

Mensajes: 4


Pequeño aprendiz, espero ser un gran maestro.


Ver Perfil
Re: While no lee primera vez que introduzco un numero
« Respuesta #2 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
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: While no lee primera vez que introduzco un numero
« Respuesta #3 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. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[RETO] Comprobar si un numero dado es un numero de la suerte « 1 2 ... 5 6 »
Programación Visual Basic
Karcrack 53 22,121 Último mensaje 17 Agosto 2010, 23:58 pm
por Dessa
Adonde introduzco esto en mi httpd.conf
Desarrollo Web
.:UND3R:. 1 2,147 Último mensaje 14 Marzo 2012, 19:22 pm
por raul338
Bloqueo del sistema cuando introduzco cualquier usb.
Windows
charlotada 4 2,714 Último mensaje 20 Marzo 2013, 12:50 pm
por knario
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines