Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: sec21 en 18 Febrero 2014, 19:58 PM

Título: Ayuda programa c++
Publicado por: sec21 en 18 Febrero 2014, 19:58 PM
Hola a todos estoy intentando crear un programilla que tras introducir los tiempos que han tardado una serie de personas al llegar a la meta de una carrera, nos indique el nombre de la persona que lha ganado y el tiempo medio (en segundos) de todas.


(http://foro.elhacker.net/usr/tmp/5303acce95989-1.JPG)

Tras hacer los cálculos necesarios para obtener los resultados finales, se preguntara si se desea introducir los datos de otra persona (obliga a que tecleen una S o N no importando que sea mayúscula o minúscula)
Si se responde con una S, el programa repetirá de nuevo el proceso. Solo cuando se teclee una N se mostrara una segunda pantalla mostrando el nombre de la persona que ha llegado en menos tiempo y el tiempo medio (en segundos) de todas las personas que han participado


(http://foro.elhacker.net/usr/tmp/5303ace333f02-2.JPG)


Mi codigo es este : #include <iostream.h>
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

void main()
{
   int hora, minuto, segundo, total1, total2, total;
   char afir, nombre1[20], nombre2[20],campeon[20];

  total1=0;
  total2=0;

  cout<<"\tIntroduce el nombre de la primera persona\n";
  gets(nombre1);
   cout<<"\tHora(0..23) ...: ";
   cin>>hora;
   cout<<"\tMinutos(0..59).: ";
   cin>>minuto;
   cout<<"\tSegundos(0..59): ";
   cin>>segundo;
   total1=((hora*3600)+(minuto*60)+segundo);

 do{cout<<"¿Otra persona? (S o N)";
    cin>>afir;
   }while (toupper(afir=='S') || toupper(afir=='N'))

 if (afir=='N') then{
  cout<<"\nNombre campeón/a.........: "<<nombre1;
   cout<<"\nSegundos que ha tardado .: "<<total1;
   }

 else{
 
 do{
   cout<<"\tIntroduce el nombre de la persona siguiente\n";
   gets(nombre2);
   cout<<"\tHora(0..23) ...: ";
   cin>>hora;
   cout<<"\tMinutos(0..59).: ";
   cin>>minuto;
   cout<<"\tSegundos(0..59): ";
   cin>>segundo;
   total2=(hora*3600+minuto*60+segundo);

  do{cout<<"¿Otra persona? (S o N)";
    cin>>afir;
   }while (toupper(afir=='S') || toupper(afir=='N'))
     }

  if (total1>total2) then{
        total2=total;
        strcpy(campeon, nombre2);
  }

  else{
      total1=total;
      strcpy(campeon, nombre1);
  }

   }while (afir=='N')

      cout<<"\nNombre campeón/a.........: "<<campeon;
   cout<<"\nSegundos que ha tardado .: "<<total;

}



si alguien puede corregirlo por favor estaría muy agradecido!!!

Gracias
Título: Re: Ayuda programa c++
Publicado por: xaps en 18 Febrero 2014, 20:45 PM
Primero de todo, cuando quieras mostrar código usa las etiquetas GeSHi para encapsularlo y que sea más fácil leerlo.

Veo varios fallos en tu aplicación:
Código (cpp) [Seleccionar]

do{cout<<"¿Otra persona? (S o N)";
     cin>>afir;
    }while (toupper(afir=='S') || toupper(afir=='N'))

Primero de todo, ¿sabes como funciona toupper()? Le estás pasando un boleano cuando espera un número entero.
Segundo, ese bucle no hace nada. Estaría ejecutándose a si mismo (en el caso de que toupper() estuviera bien empleado) hasta que introdujeras una N.

Replanteate como resolver este problema. Deberías tener un único bucle en el que se pidieran los datos y operara con ellos en cada iteracción.

Saludos.