Hola, vereis, estoy haciendo un ejercicio en el que hay que comparar los tiempos de unos pilotos durante 3 tamos de carrera y mostrar el mayor, pero como no me salia, me he puesto a hacerlo paso por paso comprobando todos los pasos. Y he encontrado un fallo y no se porque ocurre esto:
#include <iostream>
using namespace std;
struct teams{ //puse structs porque no conseguia hacerlo con class
char nombre[30];
float et1, et2, et3, total;
};
int main(){
unsigned int numcasos;
char caso[20];
teams piloto[30];
cin >> numcasos;
for (unsigned int x=0; x<numcasos; x++){
cin >> caso; //si pongo cin.getline(caso, 20) ni siquiera lo reconoce y no lo guarda
for (unsigned int y=0; y<30; y++){
cin >> piloto[y].nombre >> piloto[y].et1 >> piloto[y].et2 >> piloto[y].et3;
piloto[y].total = piloto[y].et1 + piloto[y].et2 + piloto[y].et3;
cout << piloto[y].nombre <<" "<< piloto[y].et1 <<" "<< piloto[y].et2 <<" "<< piloto[y].et3 <<" "<< piloto[y].total;
}
}
return 0;
}
El caso es que si omito la line cin >> code (que me pide el ejercicio que la ponga, pues debe introducirse para cada caso "caso N") funciona, pero si no lo quito aparecen muchisimos caracteres extraños, podeis decirme porque?
no tengo compilador a la mano pero quizas es que debes limpiar el buffer despues de leer el entero numcasos... coloca un cin.ignore() en la entrada de cada bucle y quizas se resuelva el problema:
for (unsigned int x=0; x<numcasos; x++){
//aca
cin >> caso; //si pongo cin.getline(caso, 20) ni siquiera lo reconoce y no lo guarda
for (unsigned int y=0; y<30; y++){
//y aca para ignorar el '\n' que deja >> piloto[y].et3;
cin >> piloto[y].nombre >> piloto[y].et1 >> piloto[y].et2 >> piloto[y].et3;
Quizas sea ese el error quizas no xD si no es avisas y cuando tenga compiler a la mano te ayudo
Saludos...
aun asi me pasa igual... ademas, es que necesito usar cin.getline porque en los casos de prueba habra que poner " Caso 1", y no "Caso1"... lo mismo es que no coloque bien el cin.ignore(), es una funcion que nunca he entendido demasiado bien...
ttp://www.cplusplus.com/reference/iostream/istream/ignore/
unsigned int numcasos;
char caso[20];
teams piloto[30];
cin >> numcasos;
for (unsigned int x=0; x<numcasos; x++){
cin.ignore();
cin.ignore(caso,20); //si pongo cin.getline(caso, 20) ni siquiera lo reconoce y no lo guarda
for (unsigned int y=0; y<30; y++){
cin.ignore();
cin.getline(piloto[y].nombre,30);
cin >> piloto[y].et1 >> piloto[y].et2 >> piloto[y].et3;
piloto[y].total = piloto[y].et1 + piloto[y].et2 + piloto[y].et3;
cout << piloto[y].nombre <<" "<< piloto[y].et1 <<" "<< piloto[y].et2 <<" "<< piloto[y].et3 <<" "<< piloto[y].total;
}
}
Estas seguro que eso no te funciona?... :-X No tengo compiler...
edit: es cin.getline(caso,20)... luego veo bien cual es el problema entonces :\
No, no me funciona, con tu codigo puedes escribir todo lo que quieras, que lo ignora xD
Ola, usa
cin.get(caso,20);
en vez de
cin >> caso;
El motivo del error creo que es el que te dice .:BlackCoder:., de todas formas, haciendo la substitución anterior, a mi me compiló y se ejecutó perfectamente.
Si que me funciona ahora, pero al mostrarlo me muestra el nombre del piloto sin la primera letra, por ejemplo, de Juan me muestra uan :S
#include <iostream>
using namespace std;
struct teams{ //puse structs porque no conseguia hacerlo con class
char nombre[30];
float et1, et2, et3, total;
};
int main(){
unsigned int numcasos;
char caso[20];
teams piloto[30];
cin >> numcasos;
for (unsigned int x=0; x<numcasos; x++){
cin >> caso; //si pongo cin.getline(caso, 20) ni siquiera lo reconoce y no lo guarda
for (unsigned int y=0; y<30; y++){
cin >> piloto[y].nombre >> piloto[y].et1 >> piloto[y].et2 >> piloto[y].et3;
piloto[y].total = piloto[y].et1 + piloto[y].et2 + piloto[y].et3;
cout << piloto[y].nombre <<" "<< piloto[y].et1 <<" "<< piloto[y].et2 <<" "<< piloto[y].et3 <<" "<< piloto[y].total;
}
}
return 0;
}
No tengo mucha idea de C++, pero creo que las estructuras se definen como
struct teams piloto [30]
¿Y si probases con funciones de C? Tipo fgets ()...
Por el resto debería de funcionar, no veo tus fallos...
Un saludo. Sagrini