Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Justav en 22 Enero 2018, 00:11 am



Título: Id returned 1 exit status , error en c++ (Ayuda)
Publicado por: Justav en 22 Enero 2018, 00:11 am
//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
  1. #include "iostream"
  2. #include "conio.h"
  3. #include "stdlib.h"
  4.  
  5. using namespace std;
  6. struct Alumno{
  7. char nombre[30];
  8. int edad;
  9.    float promedio;
  10. }alumno[3] , *puntero_alumno=alumno;
  11.  
  12. void pedirDatos();   ///PROTOTIPO
  13. void calcularMejorPromedio(Alumno *);
  14.  
  15.  
  16. int main(){
  17. system("color 0b");
  18.  
  19. pedirDatos();
  20. calcularMejorPromedio(puntero_alumno);
  21.  
  22. system("pause");
  23. return 0;
  24. }
  25.  
  26. void perdirDatos(){
  27.  
  28. for(int i=0;i<3;i++){
  29. fflush(stdin);
  30. cout<<"Digite nombre del alumno : ";
  31.  
  32. cin.getline((puntero_alumno+i)->nombre,30,'\n');
  33.  
  34. cout<<"Digite edad del alumno : ";
  35.  
  36. cin>>(puntero_alumno+i)->edad;cout<<endl;
  37.  
  38. cout<<"Digite promedio del alumno : ";
  39.  
  40. cin>>(puntero_alumno+i)->promedio;cout<<endl;
  41.  
  42. }
  43. }
  44.  
  45. void calcularMejorPromedio(Alumno *puntero_alumno){
  46. float mayor = 0.0;
  47. int pos=0;
  48.  
  49. for(int i=0;i<3;i++){
  50. if((puntero_alumno+i)->promedio > mayor){
  51. mayor= (puntero_alumno+i)->promedio;
  52. pos=i;
  53. }
  54. }
  55. ///imprimiendo datos
  56. cout<<"\nEl alumno con el mayor promedio es : \n";
  57. cout<<"Nombre : "<<(puntero_alumno+pos)->nombre<<endl;
  58. cout<<"edad : "<<(puntero_alumno+pos)->edad<<endl;
  59. cout<<"PROMEDIO: "<<(puntero_alumno+pos)->promedio<<endl;
  60. }
  61.  
  62.  
  63.  


Título: Re: Id returned 1 exit status , error en c++ (Ayuda)
Publicado por: WHK en 22 Enero 2018, 00:30 am
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.


Título: Re: Id returned 1 exit status , error en c++ (Ayuda)
Publicado por: WHK en 22 Enero 2018, 03:26 am
Mira, ordené tu código, lo orienté a objeto, utilicé librerías comunes y corregí un par de problemas:

Código
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <list>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. class Alumno
  9. {
  10.    private:
  11.        string nombre;
  12.        int    edad;
  13.        float  promedio;
  14.  
  15.    public:
  16.        void setNombre(string nombre)
  17.        {
  18.            this->nombre = nombre;
  19.        };
  20.  
  21.        void setNombre(char nombre[50])
  22.        {
  23.            this->setNombre(string(nombre));
  24.        };
  25.  
  26.        string getNombre()
  27.        {
  28.            return this->nombre;
  29.        };
  30.  
  31.        void setEdad(int edad)
  32.        {
  33.            this->edad = edad;
  34.        };
  35.  
  36.        int getEdad()
  37.        {
  38.            return this->edad;
  39.        };
  40.  
  41.        void setPromedio(float promedio)
  42.        {
  43.            this->promedio = promedio;
  44.        };
  45.  
  46.        float getPromedio()
  47.        {
  48.            return this->promedio;
  49.        };
  50. };
  51.  
  52. class Calculador
  53. {
  54.    private:
  55.        list<Alumno> alumnos;
  56.  
  57.    public:
  58.        void pedirDatos()
  59.        {
  60.            for(int i = 1; i <= 3; i++)
  61.            {
  62.                Alumno alumno;
  63.                char nombre[50];
  64.                int edad;
  65.                float promedio;
  66.  
  67.                cout << "Digite nombre del alumno " << i << "   : ";
  68.                cin  >> nombre;
  69.  
  70.                cout << "Digite edad del alumno " << i << "     : ";
  71.                cin  >> edad;
  72.  
  73.                cout << "Digite promedio del alumno " << i << " : ";
  74.                cin  >> promedio;
  75.  
  76.                alumno.setNombre(nombre);
  77.                alumno.setEdad(edad);
  78.                alumno.setPromedio(promedio);
  79.  
  80.                this->alumnos.push_back(alumno);
  81.            }
  82.        };
  83.  
  84.        void calcularMejorPromedio()
  85.        {
  86.            std::list<Alumno>::iterator mayor;
  87.            bool first = true;
  88.  
  89.            // Procesa cada alumno
  90.            std::list<Alumno>::iterator alumno = alumnos.begin();
  91.            while (alumno != alumnos.end())
  92.            {
  93.                if(first)
  94.                {
  95.                    first = false;
  96.  
  97.                    // Primera iteración.
  98.                    mayor = alumno;
  99.                }
  100.                else if(alumno->getPromedio() > mayor->getPromedio())
  101.                {
  102.                    // El promedio del alumno actual es mayor que el
  103.                    // promedio del alumno mayor guardado en memoria.
  104.                    mayor = alumno;
  105.                }
  106.                // Siguiente alumno en la iteracion
  107.                ++alumno;
  108.            }
  109.  
  110.            // Imprimiendo datos
  111.            cout << endl << "------------------------------------" << endl;
  112.            cout << "El alumno con el mayor promedio es :" << endl;
  113.            cout << "Nombre   : " << mayor->getNombre() << endl;
  114.            cout << "Edad     : " << mayor->getEdad() << endl;
  115.            cout << "Promedio : " << mayor->getPromedio() << endl;
  116.        };
  117. };
  118.  
  119.  
  120. int main()
  121. {
  122.    Calculador calculador;
  123.    // system("color 0b");
  124.    calculador.pedirDatos();
  125.    calculador.calcularMejorPromedio();
  126.    // system("pause");
  127.    return 0;
  128. }

Para compilar y ejecutar desde linux:

Código
  1. whk@machine:~/Escritorio$ g++ test.cc -Wall -Wextra -std=gnu++11 -o test
  2. whk@machine:~/Escritorio$ file test
  3. 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
  4. whk@machine:~/Escritorio$ chmod +x test && ./test
  5. Digite nombre del alumno 1   : test1
  6. Digite edad del alumno 1     : 10
  7. Digite promedio del alumno 1 : 5
  8. Digite nombre del alumno 2   : test2
  9. Digite edad del alumno 2     : 11
  10. Digite promedio del alumno 2 : 6
  11. Digite nombre del alumno 3   : test3
  12. Digite edad del alumno 3     : 7
  13. Digite promedio del alumno 3 : 7
  14.  
  15. ------------------------------------
  16. El alumno con el mayor promedio es :
  17. Nombre   : test3
  18. Edad     : 7
  19. 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++.