如何使函数在C ++中保存对结构输入的修改?

时间:2014-04-19 23:38:27

标签: c++ struct io

我的文件中有2个函数,一个用于输入结构中的信息(' vpis()'),另一个用于打印出它的内容(' izpis()&# 39)。输入功能不保存我输入的信息。这是代码:

#include <iostream>
#include <string>
using namespace std;

enum TIP_NASLOVA {
    STALNI,
    ZACASNI
};

struct Naslov {
    string ulica;
    string posta;
    int postna_stevilka;
    TIP_NASLOVA tip;
};

struct Oseba {
    string ime;
    string priimek;
    int starost;
    Naslov naslov;
};

void izpis(Oseba oseba) {
    cout << "IZPIS VNOSA" << endl << endl;
    cout << "Ime: " << oseba.ime << endl;
    cout << "Priimek: " << oseba.priimek << endl;
    cout << "Starost: " << oseba.starost << endl;
    cout << "Tip Naslova: " << oseba.naslov.tip << endl;
    cout << "Posta: " << oseba.naslov.postna_stevilka << " " << oseba.naslov.posta << endl;
    cout << "Naslov: " << oseba.naslov.ulica << endl;
}

void vpis(Oseba oseba) {
    int tip;
    cout << "VPIS PODATKOV NOVEGA VNOSA" << endl << endl;
    cout << endl << "VPISI IME: ";
    cin >> oseba.ime;
    cout << endl << "VPISI PRIIMEK: ";
    cin >> oseba.priimek;
    cout << endl << "VPISI STAROST: ";
    cin >> oseba.starost;
    cout << endl << "VPISI TIP NASLOVA ( 1-STALNI / 2-ZACASNI ): ";
    cin >> tip;

    switch (tip){
        case 1:
            oseba.naslov.tip = STALNI;
            break;
        case 2:
            oseba.naslov.tip = ZACASNI;
            break;
        default:
            cout << "Napaka! Izbrali ste napacen tip naslova. " <<endl;
            break;
    }

    cout << endl << "VPISI POSTNO STEVILKO: ";
    cin >> oseba.naslov.postna_stevilka;
    cout << endl << "VPISI POSTO: ";
    cin >> oseba.naslov.posta;
    cout << endl << "VPISI NASLOV (FORMAT:'TrgGeneralaMaistra1'): ";
    cin >> oseba.naslov.ulica;
    cout << endl;
}

int main() {
    Oseba oseba;
    int x;
    cout << "VPIS IN IZPIS OSEBNIH PODATKOV" << endl << endl;
    for (;;) {
        cout << "Dolocite zahtevano operacijo (1-VPIS, 2-IZPIS): ";
        cin >> x;
        cout << endl << endl;
        switch (x){
        case 1:
            vpis(oseba);
            break;
        case 2:
            izpis(oseba);
            break;
        default:
            cout << "Izbrali niste nobene operacije!" << endl << endl;
        }
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您正在将结构传递给每个函数按值,因此每个函数都会收到结构的副本,因此您所做的任何更改都是对副本进行的,不是原来的。更改您的函数以通过引用传递结构

void izpis(const Oseba &oseba)

void vpis(Oseba &oseba)

答案 1 :(得分:0)

如果要对其进行更改,您将希望通过引用传递对象:)

更改void vpis(Oseba oseba) {

void vpis(Oseba& oseba) {