Не сохраняются данные в масив c++ [требует правки]

412
07 января 2017, 14:13

Писал код и столкнулся с такой проблемой: при добавлении данных в массив эти данные не сохраняются глобально и существуют только в функции добавления данных. Собственно вот вопрос как глобально сохранить данные.

#pragma once
const int MAX_USR = 80, MAX_NLENG = 15, MAX_SLENG = 15, MAX_CYLENG = 20, MAX_STRLENG=30;
class AccManagment
{
public:
    AccManagment();
    void Menu();
    void AddUsr();
    void CloseAcc();
    void Deposit();
    void Withdraw();
    void Info();
    void Printacc();
    void Search();
    void ReadFrom();
    void SaveTo();
    char Fname[MAX_USR][MAX_NLENG] = { { '0' },{ '0' } };// В любой из ниже указанных массивов не добавляются данные.
    char Lname[MAX_USR][MAX_SLENG] = { { '0' },{ '0' } };//
    char Street[MAX_USR][MAX_STRLENG] = { { '0' },{ '0' } };//
    char City[MAX_USR][MAX_CYLENG] = { { '0' },{ '0' } };//
    int ZipCode[MAX_USR] = { 0 };//
    int Phone[MAX_USR] = { 0 };//
    int Statement[MAX_USR] = { 0 };//
};

#include"AccManagment.h"
#include<iostream>
#include <cstring>
#include <fstream>
using namespace std;
using std::string;
AccManagment::AccManagment()
{
}
void AccManagment::AddUsr() {
    AccManagment acc;
    int i = 0;
    while (Fname[i][0] != '0')
        i++;
    cout << "\nEnter a name: " << endl;
    cin >> Fname[i];//В этой строчке юзер добавляет данные в массив, если запустить проверку в этой функции то массивы будут заполненны.
    cout << "\nEnter a surname: " << endl;
    cin >> Lname[i];
    cout << "\nPlease enter your phone number: " << endl;
    cin >> Phone[i];
    cout << "\nEnter a street: " << endl;
    cin.ignore();
    cin.getline(Street[i], '/n');
    cout << "\nEnter a City: " << endl;
    cin >> City[0];
    cout << "\nEnter a zip code: " << endl;
    cin >> ZipCode[i];
    cout << "\nYour ID Is: ";
    cout << i << endl;
    acc.Menu();
}
void AccManagment::Printacc() {
    AccManagment acc;
    //Just testing the function here
        cout <<"\nFirst name: " << Fname[0] << endl;//Из другой фунции пытаюсь получить данные которые ввел юзер но получаю лишь 0 которые я назначил в header'e.
        cout <<"\nLast name: "<< Lname[0]<<endl;
        cout <<"\nPhone number: "<< Phone[0] << endl;
        cout <<"\nStreet: "<<Street[0] << endl;
        cout << "\nCity: "<< City[0] << endl;
        cout <<"\nZip code: " << ZipCode[0] << endl;
        cout <<"\Statement: " << Statement[0]<<" $" << endl;
    acc.Menu();
}
Answer 1

Из представленного вами кода не ясно, где именно данные "не сохраняются глобально". Но в любом случае ваш код содержит бессмыслицу. В показанных функциях вы создаете временный объект с именем acc

void AccManagment::AddUsr() {
    AccManagment acc;
    //...
    acc.Menu();
}

который не имеет отношения к тому объекту, для которого вызываются функции-члены класса, а затем этот временный объект передаете далее в другие функции, то есть, точнее будет сказать, вызываются функции-члены класса для этого временного объекта, члены данных которого не заполнены.

Функции класса должны иметь дело с тем объектом, для которого они вызываются. Поэтому просто удалите объявление этого временного объекта и вызывайте функции для текущего объекта. Например,

void AccManagment::AddUsr() {
    // AccManagment acc; - удалить эту строку
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    //...
    Menu();
   ^^^^^^^
}

или тоже самое в другой функции

void AccManagment::Printacc() {
    //AccManagment acc; - удалить эту строку
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    //...
    Menu();
    ^^^^^^^
}
Answer 2

надо объект класса AccManagment объявлять за пределами функций. У вас идет путаница: объявление класса!=создание объекта класса

READ ALSO
Как сохранить 16 бит в файл

Как сохранить 16 бит в файл

Допустим если я открою текстовый файл и сохраню туда число 65535, то он будет весть 5 байт, но данное число можно в битах выразить как 1111111111111111,...

445
Программирование attiny2313 на C++

Программирование attiny2313 на C++

Написал код на C++ для мк attiny2313 хотел бы узнать как этот код должен выглядеть на самом деле, потому что этот я полагаю костыль тот еще

380