Problem with structures

1

The program consists of entering two dates and analyzing which is larger. The problem is that the second date always comes out higher (Exactly happens in the first else if

)

#include<iostream> using namespace std;

typedef struct {
    int dia;
    int mes;
    int ano; }tFecha;

void rellenarDia(tFecha uno,tFecha dos); void rellenarMes(tFecha uno, tFecha dos); void rellenarAno(tFecha uno, tFecha dos);


int main() {
    tFecha uno;
    tFecha dos;
    rellenarDia(uno,dos);
    rellenarMes(uno,dos);
    rellenarAno(uno,dos);

    if(uno.ano > dos.ano)
    {
        cout << "La fecha 1 es mayor";
    }else if(uno.ano < dos.ano)
    {
        cout << "La fecha 2 es mayor";
    }else
    {
        if(uno.mes > dos.mes)
        {
            cout << "La fecha 1 es mayor";
        }else if(uno.mes < dos.mes)
        {
            cout << "La fecha 2 es mayor";
        }else
        {
            if(uno.dia > dos.dia)
            {
                cout << "La fecha 1 es mayor";
            }else if(uno.dia < dos.dia)
            {
                cout << "La fecha 2 es mayor";
            }else
            {
                cout << "Las fechas son iguales";
            }
        }
    } }

void rellenarDia(tFecha uno,tFecha dos) {
    cout << "Introduzca el dia de la fecha 1: ";
    cin >> uno.dia;
    cout << "Introduzca el dia de la fecha 2: ";
    cin >> dos.dia; }

void rellenarMes(tFecha uno, tFecha dos) {
    cout << "Introduzca el mes de la fecha 1: ";
    cin >> uno.mes;
    cout << "Introduzca el mes de la fecha 2: ";
    cin >> dos.mes; }

void rellenarAno(tFecha uno, tFecha dos) {
    cout << "Introduzca el año de la fecha 1: ";
    cin >> uno.ano;
    cout << "Introduzca el año de la fecha 2: ";
    cin >> dos.ano; }
    
asked by Vendetta 27.01.2018 в 20:03
source

2 answers

2

Pass the parameters by reference:

void rellenarDia(tFecha &uno, tFecha &dos);

In your code the object is being passed by value. Then when you call the function for rellenarDia , rellenarMes or rellenarAno the value is stored in the member variables, but when the control returns to the function main the values are not reflected as they are stored in a copy of the object and not in the original object.

Solution:

#include<iostream>

using namespace std;

typedef struct {
    int dia;
    int mes;
    int ano;
} tFecha;

// pasa los parametros por referencia
void rellenarDia(tFecha &uno, tFecha &dos);

void rellenarMes(tFecha &uno, tFecha &dos);

void rellenarAno(tFecha &uno, tFecha &dos);


int main() {
    tFecha uno;
    tFecha dos;
    rellenarDia(uno, dos);
    rellenarMes(uno, dos);
    rellenarAno(uno, dos);

    if (uno.ano > dos.ano) {

        cout << "La fecha 1 es mayor";
    } else if (uno.ano < dos.ano) {

        cout << "La fecha 2 es mayor";
    } else {
        if (uno.mes > dos.mes) {

            cout << "La fecha 1 es mayor";
        } else if (uno.mes < dos.mes) {

            cout << "La fecha 2 es mayor";
        } else {
            if (uno.dia > dos.dia) {

                cout << "La fecha 1 es mayor";
            } else if (uno.dia < dos.dia) {

                cout << "La fecha 2 es mayor";
            } else {

                cout << "Las fechas son iguales";
            }
        }
    }
}

// recibe parametros por referencia
void rellenarDia(tFecha &uno, tFecha &dos) {
    cout << "Introduzca el dia de la fecha 1: ";
    cin >> uno.dia;
    cout << "Introduzca el dia de la fecha 2: ";
    cin >> dos.dia;
}

// recibe parametros por referencia
void rellenarMes(tFecha &uno, tFecha &dos) {
    cout << "Introduzca el mes de la fecha 1: ";
    cin >> uno.mes;
    cout << "Introduzca el mes de la fecha 2: ";
    cin >> dos.mes;
}

// recibe parametros por referencia
void rellenarAno(tFecha &uno, tFecha &dos) {
    cout << "Introduzca el año de la fecha 1: ";
    cin >> uno.ano;
    cout << "Introduzca el año de la fecha 2: ";
    cin >> dos.ano;
}
    
answered by 27.01.2018 / 20:32
source
3

This is c ++, not c. Then instead of this

typedef struct {
  int dia;
  int mes;
  int ano;
}tFecha;

Do this

struct tFecha{
  int dia;
  int mes;
  int ano;
};

Now ...

  

The program consists of entering two dates and analyzing which is larger.

The problem is in the functions ... yes, in all:

void rellenarDia(tFecha uno,tFecha dos);

The parameters are passed by value, what happens then is that when calling a function a local copy of each parameter is made which is the one that is modified in the function ... when the function finishes the local copy is destroyed ... while the original version does not change.

The solution is as simple as using references:

void rellenarDia(tFecha & uno,tFecha & dos);
//                      ^            ^
    
answered by 27.01.2018 в 20:34