Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jbuitrago en 21 Septiembre 2016, 06:17 am



Título: Ayuda!! Problema de ejecución en un bucle
Publicado por: jbuitrago en 21 Septiembre 2016, 06:17 am
Hola, soy nuevo en la programación y estoy haciendo un programa sencillo, pero por alguna extraña razón no se ejecuta de buena manera.
El programa pide introducir un nombre y edad  y de acuerdo a un rango de edad establecido se imprime un valor ("piso n"); el problema consiste en que cuando hay que introducir el nombre, el programa se ejecuta sin dar chance de introducir la edad y automáticamente adopta un valor desconocido.
lo interesante es que cuando invierto el orden de la ejecución (primero la edad y luego el nombre) funciona bien.

la única idea que se me ocurre, de cual puede ser el problema, es que haya un conflicto en el tipo de las variables y el programa se vuelva loco XD .

Pdt: estoy utilizando codeblocks

Este es el codigo:


Código
  1. #include <iostream>
  2.  
  3. //PROGRAMA QUE DEVUELVE UN VALOR "PISO" SEGUN LA EDAD INGRESADA
  4.  
  5. using namespace std;
  6.  
  7. main()
  8. {
  9.    char name;
  10.    int edad;
  11.  
  12.    cout<<"Introduzca su nombre :";cin>>name;
  13.    cout<<"\nDigite su edad :";cin>>edad;
  14.  
  15.  
  16.    cout<<"\n";
  17.  
  18.        if(edad>=0 && edad<=9)cout<<"PISO 0";
  19.            else if(edad>=10 && edad<=19)cout<<"PISO 1";
  20.                else if(edad>=20 && edad<=29)cout<<"PISO 2";
  21.                    else if(edad>=30 && edad<=39)cout<<"PISO 3";
  22.                        else if(edad>=40 && edad<=49)cout<<"PISO 4";
  23.                            else if(edad>=50 && edad<=59)cout<<"PISO 5";
  24.                                else if(edad>=60 && edad<=69)cout<<"PISO 6";
  25.                                    else if(edad>=70 && edad<=79)cout<<"PISO 7";
  26.        else
  27.        cout<<"\nERROR"<<endl;
  28.  
  29.        cout<<endl;
  30. }
  31.  


Mod: Los códigos deben ir en etiquetas GeSHi


Título: Re: Ayuda!! Problema de ejecución en un bucle
Publicado por: engel lex en 21 Septiembre 2016, 06:48 am
primero que nada main es de tipo int y retorna 0 por regla general... es raro que el compilador te permita compilar eso...

segundo, lo que pasa es que el enter lo está tomando el otro cin... debes usar cin.ignore, lee esto

http://foro.elhacker.net/programacion_cc/funcion_cinignore-t290246.0.html (http://foro.elhacker.net/programacion_cc/funcion_cinignore-t290246.0.html)


Título: Re: Ayuda!! Problema de ejecución en un bucle
Publicado por: fflush en 21 Septiembre 2016, 11:07 am
Desconozco como funciona C++ pero  no tendrias que guardar el nombre en un string? en vez de un caracter?


Título: Re: Ayuda!! Problema de ejecución en un bucle
Publicado por: Nucleorion en 21 Septiembre 2016, 13:38 pm
Tal como te dice hotcake has de usar una variable tipo string para el nombre.

El codigo que te pongo mas abajo funciona compilandolo en notepad++ con MinGW y usando estos paramatros:
Citar
//Guardar el archivo actual
NPP_SAVE

//Borrar el exe anterior
cmd /c del /Q "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"

//Compila (aqui debes indicar la ruta en donde se encuentra tú compilador g++)
C:\MinGW\bin\g++.exe "$(FULL_CURRENT_PATH)" -o $(NAME_PART)

//Ejecutamos el programa.
$(CURRENT_DIRECTORY)\$(NAME_PART).exe

char solo guarda un caracter que es un numero de 0 a 255. char se puede usar para guardar cadenas si lo ponemos cono array char[20]

Lo que hacemos es declarar name como string, que es un tipo especial de dato para guardar cadenas de caracteres:
He añadido ademas la impresion de la variable name para probar su funcionamiento.
Código
  1. #include <iostream>
  2.  
  3. //PROGRAMA QUE DEVUELVE UN VALOR "PISO" SEGUN LA EDAD INGRESADA
  4.  
  5. using namespace std;
  6.  
  7. main()
  8. {
  9.        string name;
  10.        int edad;
  11.  
  12.        cout<<"Introduzca su nombre :";
  13. cin>>name;
  14.        cout<<"Digite su edad :";
  15. cin>>edad;
  16.  
  17.        cout<<"\n"<<name<<" VA AL ";
  18.  
  19. if(edad>=0 && edad<=9)cout<<"PISO 0";
  20. else if(edad>=10 && edad<=19)cout<<"PISO 1";
  21. else if(edad>=20 && edad<=29)cout<<"PISO 2";
  22. else if(edad>=30 && edad<=39)cout<<"PISO 3";
  23. else if(edad>=40 && edad<=49)cout<<"PISO 4";
  24. else if(edad>=50 && edad<=59)cout<<"PISO 5";
  25. else if(edad>=60 && edad<=69)cout<<"PISO 6";
  26. else if(edad>=70 && edad<=79)cout<<"PISO 7";
  27. else
  28. cout<<"\nERROR"<<endl;
  29.  
  30. cout<<endl;
  31. }

El uso de cin.ignore lo desconozco ya que he solido usar simpre printf y scanf

Declarar main como int y devolver un valor con return, parece que depende del compilador.

Y tambien te informo ya de paso de que no estas usando ningun bucle en ese codigo.