Ayuda!! Problema de ejecución en un bucle

Iniciado por jbuitrago, 21 Septiembre 2016, 06:17 AM

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

jbuitrago

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 (cpp) [Seleccionar]
#include <iostream>

//PROGRAMA QUE DEVUELVE UN VALOR "PISO" SEGUN LA EDAD INGRESADA

using namespace std;

main()
{
   char name;
   int edad;
   
   cout<<"Introduzca su nombre :";cin>>name;
   cout<<"\nDigite su edad :";cin>>edad;
   

   cout<<"\n";

       if(edad>=0 && edad<=9)cout<<"PISO 0";
           else if(edad>=10 && edad<=19)cout<<"PISO 1";
               else if(edad>=20 && edad<=29)cout<<"PISO 2";
                   else if(edad>=30 && edad<=39)cout<<"PISO 3";
                       else if(edad>=40 && edad<=49)cout<<"PISO 4";
                           else if(edad>=50 && edad<=59)cout<<"PISO 5";
                               else if(edad>=60 && edad<=69)cout<<"PISO 6";
                                   else if(edad>=70 && edad<=79)cout<<"PISO 7";
       else
       cout<<"\nERROR"<<endl;
       
       cout<<endl;
}



Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

fflush

Desconozco como funciona C++ pero  no tendrias que guardar el nombre en un string? en vez de un caracter?

Nucleorion

#3
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 (cpp) [Seleccionar]
#include <iostream>

//PROGRAMA QUE DEVUELVE UN VALOR "PISO" SEGUN LA EDAD INGRESADA

using namespace std;

main()
{
       string name;
       int edad;

       cout<<"Introduzca su nombre :";
cin>>name;
       cout<<"Digite su edad :";
cin>>edad;

       cout<<"\n"<<name<<" VA AL ";

if(edad>=0 && edad<=9)cout<<"PISO 0";
else if(edad>=10 && edad<=19)cout<<"PISO 1";
else if(edad>=20 && edad<=29)cout<<"PISO 2";
else if(edad>=30 && edad<=39)cout<<"PISO 3";
else if(edad>=40 && edad<=49)cout<<"PISO 4";
else if(edad>=50 && edad<=59)cout<<"PISO 5";
else if(edad>=60 && edad<=69)cout<<"PISO 6";
else if(edad>=70 && edad<=79)cout<<"PISO 7";
else
cout<<"\nERROR"<<endl;

cout<<endl;
}


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.