Id returned 1 exit status , error en c++ (Ayuda)

Iniciado por Justav, 22 Enero 2018, 00:11 AM

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

Justav

//estaba programando en c++ estructuras con punteros y me sale ese error , no lo entiendo y no encuentro solución , espero me puedan ayuda :C

Código (cpp) [Seleccionar]

#include "iostream"
#include "conio.h"
#include "stdlib.h"

using namespace std;
struct Alumno{
char nombre[30];
int edad;
    float promedio;
}alumno[3] , *puntero_alumno=alumno;

void pedirDatos();   ///PROTOTIPO
void calcularMejorPromedio(Alumno *);


int main(){
system("color 0b");

pedirDatos();
calcularMejorPromedio(puntero_alumno);

system("pause");
return 0;
}

void perdirDatos(){

for(int i=0;i<3;i++){
fflush(stdin);
cout<<"Digite nombre del alumno : ";

cin.getline((puntero_alumno+i)->nombre,30,'\n');

cout<<"Digite edad del alumno : ";

cin>>(puntero_alumno+i)->edad;cout<<endl;

cout<<"Digite promedio del alumno : ";

cin>>(puntero_alumno+i)->promedio;cout<<endl;

}
}

void calcularMejorPromedio(Alumno *puntero_alumno){
float mayor = 0.0;
int pos=0;

for(int i=0;i<3;i++){
if((puntero_alumno+i)->promedio > mayor){
mayor= (puntero_alumno+i)->promedio;
pos=i;
}
}
///imprimiendo datos
cout<<"\nEl alumno con el mayor promedio es : \n";
cout<<"Nombre : "<<(puntero_alumno+pos)->nombre<<endl;
cout<<"edad : "<<(puntero_alumno+pos)->edad<<endl;
cout<<"PROMEDIO: "<<(puntero_alumno+pos)->promedio<<endl;
}



WHK

#1
No se pero en mi sistema operativo no existe el comando color, supongo que solo quieres programar para windows, en ese caso usa c#. No has pensado en usar clases en ves de estructuras? si usas c++ puedes programar orientado a objeto.

Al momento de compilar utiliza estos argumentos: "-Wall -Wextra" y vee que errores aparecen. Por lo menos en mi caso esos argumentos los uso con g++ desde linux.

WHK

#2
Mira, ordené tu código, lo orienté a objeto, utilicé librerías comunes y corregí un par de problemas:

Código (cpp) [Seleccionar]
#include <iostream>
#include <algorithm>
#include <list>

using namespace std;


class Alumno
{
   private:
       string nombre;
       int    edad;
       float  promedio;

   public:
       void setNombre(string nombre)
       {
           this->nombre = nombre;
       };

       void setNombre(char nombre[50])
       {
           this->setNombre(string(nombre));
       };

       string getNombre()
       {
           return this->nombre;
       };

       void setEdad(int edad)
       {
           this->edad = edad;
       };

       int getEdad()
       {
           return this->edad;
       };

       void setPromedio(float promedio)
       {
           this->promedio = promedio;
       };

       float getPromedio()
       {
           return this->promedio;
       };
};

class Calculador
{
   private:
       list<Alumno> alumnos;

   public:
       void pedirDatos()
       {
           for(int i = 1; i <= 3; i++)
           {
               Alumno alumno;
               char nombre[50];
               int edad;
               float promedio;

               cout << "Digite nombre del alumno " << i << "   : ";
               cin  >> nombre;

               cout << "Digite edad del alumno " << i << "     : ";
               cin  >> edad;

               cout << "Digite promedio del alumno " << i << " : ";
               cin  >> promedio;

               alumno.setNombre(nombre);
               alumno.setEdad(edad);
               alumno.setPromedio(promedio);

               this->alumnos.push_back(alumno);
           }
       };

       void calcularMejorPromedio()
       {
           std::list<Alumno>::iterator mayor;
           bool first = true;
           
           // Procesa cada alumno
           std::list<Alumno>::iterator alumno = alumnos.begin();
           while (alumno != alumnos.end())
           {
               if(first)
               {
                   first = false;

                   // Primera iteración.
                   mayor = alumno;
               }
               else if(alumno->getPromedio() > mayor->getPromedio())
               {
                   // El promedio del alumno actual es mayor que el
                   // promedio del alumno mayor guardado en memoria.
                   mayor = alumno;
               }
               // Siguiente alumno en la iteracion
               ++alumno;
           }

           // Imprimiendo datos
           cout << endl << "------------------------------------" << endl;
           cout << "El alumno con el mayor promedio es :" << endl;
           cout << "Nombre   : " << mayor->getNombre() << endl;
           cout << "Edad     : " << mayor->getEdad() << endl;
           cout << "Promedio : " << mayor->getPromedio() << endl;
       };
};


int main()
{
   Calculador calculador;
   // system("color 0b");
   calculador.pedirDatos();
   calculador.calcularMejorPromedio();
   // system("pause");
   return 0;
}


Para compilar y ejecutar desde linux:

Código (bash) [Seleccionar]
whk@machine:~/Escritorio$ g++ test.cc -Wall -Wextra -std=gnu++11 -o test
whk@machine:~/Escritorio$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d0df961dbb63c5df1b4e02ca2430b12c8ecc6646, not stripped
whk@machine:~/Escritorio$ chmod +x test && ./test
Digite nombre del alumno 1   : test1
Digite edad del alumno 1     : 10
Digite promedio del alumno 1 : 5
Digite nombre del alumno 2   : test2
Digite edad del alumno 2     : 11
Digite promedio del alumno 2 : 6
Digite nombre del alumno 3   : test3
Digite edad del alumno 3     : 7
Digite promedio del alumno 3 : 7

------------------------------------
El alumno con el mayor promedio es :
Nombre   : test3
Edad     : 7
Promedio : 7


Ahora es solo cuestión de crear todas las validaciones de entrada de valores.

También lo puedes compilar en windows sin problemas generando un .exe. Trata de ser mas ordenado cuando programes, usa comentarios, ten cuidado con las identaciones, acostumbrate a utilizar llaves foraneas siempre, etc, intenta que tu código siempre sea legible y facil de entender por otras personas.

Si vas a programar con estructuras y punteros te recomiendo mejor utilizar c en ves de c++.