Jak poprawnie wywołać funkcje? Problem z działaniem programu.

0

Witam,

Napisałem prostą bazę danych z możliwością zapisu do pliku i odczytu. Problem jak opisałem w temacie po krótce, polega na tym że, napisane funkcje są wywoływane (z mojej wiedzy na temat programowania wynika że, poprawnie) ale nie zwracają żadnych wartości do jakich przecież zostały napisane. Zadany katalog zapisu istnieje, wprowadzam zmienną "nazwa" jako "c://pliki/......". to chyba tyle, jeżeli potrzebna są jakie kolwiek jeszcze szczegóły dorzucę.

Pozdrawiam, Krzysiek.

 
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

char zapis (char nazwa[40], char text[255])
{
    fstream plik_zapis;
    plik_zapis.open(nazwa,ios::out|ios::binary);
    plik_zapis.write(text,strlen(text));
    plik_zapis.close();
    fstream lista;
    lista.open("C://pliki/lista.dat",ios::out|ios::app);
    lista.write(nazwa,strlen(nazwa));
    lista.close();
    return 0;
}

int odczyt (char *dane, char nazwa[40], int dlugosc_pliku)
{
    fstream plik_odczyt;
    plik_odczyt.open(nazwa,ios::in|ios::binary);
    plik_odczyt.seekg(0,ios::end);
    dlugosc_pliku=plik_odczyt.tellg();
    dane=new char[dlugosc_pliku+1];
    plik_odczyt.seekg(0,ios::beg);
    plik_odczyt.read(dane,dlugosc_pliku);
    plik_odczyt.close();
    dane[dlugosc_pliku]=0;
    cout << dane;
    delete[]dane;
    return 0;
}

int odczyt_listy (char *dane, char nazwa[40], int dlugosc_pliku)
{
    fstream lista_odczyt;
    lista_odczyt.open("c://pliki.lista.dat",ios::in|ios::binary);
    lista_odczyt.seekg(0,ios::end);
    dlugosc_pliku=lista_odczyt.tellg();
    dane=new char[dlugosc_pliku+1];
    lista_odczyt.seekg(0,ios::beg);
    lista_odczyt.read(dane,dlugosc_pliku);
    lista_odczyt.close();
    dane[dlugosc_pliku]=0;
    cout << dane;
    delete[]dane;
    return 0;
}

int main()
{
    int w;
    char nazwa[40], text[255];

        cout << "Witaj w menu, co chesz zrobic? " << endl;
        cout << endl;
        cout << "Aby stworzyc i zapisac plik wybierz [1] " << endl;
        cout << "Aby odczytac plik wybierz [2]" << endl ;
        cout << "Aby wyświetlic liste plikow wybierz [3] " << endl;
        cout << "Aby wyjsc z programu wybierz [0] " << endl ;
        cin >> w;
        cout << endl;

    switch(w)
    {
        case 1: char zapis (char nazwa[40], char text[255]);
                cout << "Podaj sciezke i nazwe pliku w formacie: " <<endl;
                cout << "X://KATALOG/NAZWA.ROZSZERZENIE " << endl;
                cin >> nazwa[40];
                cout << endl;
                cout << "Podaj teraz co chcesz wpisac do pliku " << endl;
                cin >> text[255];
                return 0;

        case 2: int odczyt (char *dane, char nazwa[40], int dlugosc_pliku);
                cout << "Podaj sciezke i nazwe pliku w formacie: " <<endl;
                cout << "WINDOWS " << endl;
                cout << endl;
                cin >> nazwa[40];
                return 0;

        case 3: int odczyt_listy (char *dane, char nazwa[40], int dlugosc_pliku);
                cin >> nazwa[40];
                return 0;

        case 0: if (w == 0)
                {
                    break;
                }
    }


    return 0;
}

0

Funkcje nie są wcale wywoływane poprawie.
funkcja

char zapis (char nazwa[40], char text[255])

powinna zostać wywołana tak:

char nazwa[40];
//wczytanie nazwy do tablicy nazwa
char text[255];
//wczytanie czegostam do tablicy text
zapis(nazwa,text); //wywołanie funkcji

Poza tym proponuje wywołać funkcje PO WCZYTANIU argumentów, a nie przed...
Ten return 0; w każdym case jest zbędny.

0

Domślam się że chcesz zapisać ścieżkę do pliku w postaci łańcuchu znaków "nazwa[40]".
Zamiast:
cin >> nazwa[40];
Powinieneś zrobić to na przykład tak:

for (int i=0;i<40;i++)
{
cin>>nazwa[i]
}

Gdyż nazwa[40] kompilator rozumie jako 40 element łańcucha znaków "nazwa".

0

@Pafos czy ty jesteś normalny? o_O

char nazwa[40];
cin>>nazwa;
0

Dziękuje za podpowiedz, wklepie poprawki do kodu. Jeżeli będzie coś nie tak to pogłówkuje, a jak nie to znów zapytam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1