Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z operacją na plikach

Ostatnio zmodyfikowano 2011-01-09 22:08
Autor Wiadomość
Tymek
Temat założony przez niniejszego użytkownika
Problem z operacją na plikach
» 2011-01-08 19:30:50
C/C++
#include <iostream.h>
#include <fstream.h>
struct firmy {
    char * nazwa;
    float przychod;
};
main()
{
   
    firmy firma;
    ofstream plik1( "dane_firmy.dat", ios::binary | ios::app | ios::out );
    firma.nazwa = "test";
    firma.przychod = 23;
   
    plik1.write( reinterpret_cast < char *>( & firma ), sizeof( firma ) );
    plik1.close();
    int i = 1;
    ifstream plik( "dane_firmy.dat", ios::binary | ios::in );
    while( 1 )
    {
       
        plik.read( reinterpret_cast < char *>( & firma ), sizeof( firma ) );
       
        if( plik.eof() )
             break;
       
        cout << i << " " << firma.nazwa << " " << firma.przychod << endl;
        i++;
    }
    plik.close();
    getchar();
}

To zadanie muszę zamienić na " Przykład 1 - obsługa programu za pomocą menu. Poszczególne operacje wykonujemy za pomocą funkcji.
Dane wczytujemy z klawiatury."

nie za bardzo mi to poszło i mam dużo błędów z którymi sam nie nie mogę się uporać
C/C++
#include <iostream>
#include <fstream>
struct firmy {
    char * nazwa;
    float przychod;
};

void zapisz_do_pliku( ifstream * plik1, firmy dane )
{
    plik1->read( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
}

void odczytaj_z_pliku( ofstram * plik2, firmy dane )
{
    plik2->write( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
}

int main()
{
    cout << "wybierz opcje 1 dla zapisania , 2 dla odczytania " << endl;
    cin >> wybor;
    switch( wybor )
    case 1
: cin >> firma.nazwa >> firma.przychod;
    zapisz_do_pliku( plik1, & firma );
    break;
case 2:
    odczytaj_z_pliku( plik2, & firma );
    cout << firma.nazwa << firma, przychod;
    break;
}
//zapis danych
firmy firma;
ofstream plik1( "dane_firmy.dat", ios::binary | ios::app | ios::out );
ifstream plik2( "dane_firmy.dat", ios::binary | ios::in );
firma.nazwa = "test";
firma.przychod = 23;

plik1.close();

system( "pause" );
}
P-26351
dmx81
» 2011-01-08 23:44:35
po pierwsze

wybor - int?char? cokolwiek?


P-26368
dmx81
» 2011-01-08 23:53:58
po drugie:

plik1, plik2 - uzywasz zmiennych zanim zadeklarujesz/zdefiniujesz

po trzecie, to samo firma

no i using namespace std ? albo std::cout itd...
P-26370
ison
» 2011-01-08 23:55:26
brakuje ci przestrzeni nazw std
C/C++
using namespace std;

w linii 16 powinno być ofstream a nie ofstram

zmienna wybor jest niezadeklarowana
dopisz
C/C++
int wybor;
przed
C/C++
cin >> wybor;

w linii 29 zmienna firma nie jest zadeklarowana
dopisz
C/C++
firmy firma;
na początku funkcji main

przy switchu brakuje ci klamer

plik1 i plik2 w funkcji main są niezadeklarowane

w linii 39 zmienne plik1 i plik2 nazwij inaczej, nazwy ci kolidują (ifstream i ofstream)

błędów jest więcej...
P-26371
dmx81
» 2011-01-08 23:58:40
widze ze sie zdublowalismy w odpowiedziach w tym samym czasie ;)- wazne, aby autor postu odnalazl bledy i poprawil...


PS>> nasuwa sie pytanie, czy przy tak podstawowych bledach, znane jest ci rzutowanie, ktorego tu uzywasz?
P-26372
Tymek
Temat założony przez niniejszego użytkownika
» 2011-01-09 15:13:04
C/C++
#include <iostream>
#include <fstream>
using namespace std;

struct firmy
{
    char * nazwa;
    float przychod;
    void zapisz_do_pliku( ifstream * plik1, firmy dane );
    void odczytaj_z_pliku( ofstream * plik2, firmy dane );
};

void zapisz_do_pliku( ifstream * plik1, firmy dane )
{
    plik1->read( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
}

void odczytaj_z_pliku( ofstream * plik2, firmy dane )
{
    plik2->write( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
}

int main()
{
    ofstream plik1( "dane_firmy.dat", ios::binary | ios::app | ios::out );
    ifstream plik2( "dane_firmy.dat", ios::binary | ios::in );
    firmy firma;
    int wybor;
    firma.nazwa = "test";
    firma.przychod = 23;
   
    cout << "wybierz opcje 1 dla zapisania , 2 dla odczytania " << endl;
    cin >> wybor;
    switch( wybor )
    {
    case 1:
        cin >> firma.nazwa >> firma.przychod;
        zapisz_do_pliku( plik1, & firma );
        break;
    case 2:
        odczytaj_z_pliku( plik2, & firma );
        cout << firma.nazwa << firma.przychod;
        break;
    }
   
   
    plik1.close();
    plik2.close();
   
    system( "pause" );
}

wiecie może co to za błędy?
38  invalid conversion from `void*' to `std::ifstream*'
38  conversion from `firmy*' to non-scalar type `firmy' requested
41  invalid conversion from `void*' to `std::ofstream*'

Jeżeli ktoś wie co skopałem z tymi wskaźnikami i może mi wytłumaczyć będę bardzo wdzięczny
P-26380
ison
» 2011-01-09 16:44:48
w funkcji
C/C++
void zapisz_do_pliku( ifstream * plik1, firmy dane )
argumentem jest ifstream a ty próbujesz przekazać obiekt typu ofstream
P-26381
Tymek
Temat założony przez niniejszego użytkownika
» 2011-01-09 17:04:08
C/C++
#include <iostream>
#include <fstream>
using namespace std;

struct firmy
{
    char * nazwa;
    float przychod;
    void zapisz_do_pliku( ifstream * plik1, firmy dane );
    void odczytaj_z_pliku( ofstream * plik2, firmy dane );
};

void zapisz_do_pliku( ifstream * plik1, firmy dane )
{
    plik1->read( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
}

void odczytaj_z_pliku( ofstream * plik2, firmy dane )
{
    plik2->write( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
}

int main()
{
    ofstream plik2( "dane_firmy.dat", ios::binary | ios::app | ios::out );
    ifstream plik1( "dane_firmy.dat", ios::binary | ios::in );
    firmy firma;
    int wybor;
    firma.nazwa = "test";
    firma.przychod = 23;
   
    cout << "wybierz opcje 1 dla zapisania , 2 dla odczytania " << endl;
    cin >> wybor;
    switch( wybor )
    {
    case 1:
        cin >> firma.nazwa >> firma.przychod;
        zapisz_do_pliku( plik1, & firma );
        break;
    case 2:
        odczytaj_z_pliku( plik2, & firma );
        cout << firma.nazwa << firma.przychod;
        break;
    }
   
   
    plik1.close();
    plik2.close();
   
    system( "pause" );
}
Poprawiłem ale nadal mam błąd
38  a.cpp invalid conversion from `void*' to `std::ifstream*'
38 1 a.cpp conversion from `firmy*' to non-scalar type `firmy' requested
41  invalid conversion from `void*' to `std::ofstream*'
41 C:\Documents and Settings\x\Pulpit\Studia\Projekty programów\Lab 11\zadanie 1 a.cppnon-scalar type `firmy' requested
P-26382
« 1 » 2
  Strona 1 z 2 Następna strona