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

[C++] Zapisywanie tablicy do pliku testowego.

Ostatnio zmodyfikowano 2015-11-15 17:13
Autor Wiadomość
zielak123
Temat założony przez niniejszego użytkownika
[C++] Zapisywanie tablicy do pliku testowego.
» 2015-11-15 13:22:28
Dopiero zaczynam przygode z klasami.
C/C++
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;

class Dane {
public:
    int tab[ 10 ][ 10 ];
    void czytaj_dane();
    void zapisz_dane_do_pliku();
    void czytaj_dane_z_pliku();
};

void Dane::czytaj_dane() {
    int tab[ 10 ][ 10 ] = {
        { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
        { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
    };
}
void Dane::zapisz_dane_do_pliku() {
    fstream plik;
    plik.open( "dane.txt", ios::out );
    for( int i = 0; i < 10; i++ ) {
        for( int j = 0; j < 10; j++ ) {
            plik << tab[ i ][ j ] << " ";
        }
    }
    plik.close();
}
void Dane::czytaj_dane_z_pliku() {
    string linia;
    fstream plik;
    cout << "\nWyswietlam dane z pliku: " << endl;
    plik.open( "dane.txt", ios::in );
    if( plik.good() == true )
    {
        while( !plik.eof() )
        {
            getline( plik, linia );
            cout << linia << endl; //wyświetlenie linii
        }
        plik.close();
    }
}
int main() {
    Dane dane;
    dane.czytaj_dane();
    dane.zapisz_dane_do_pliku();
    dane.czytaj_dane_z_pliku();
    return 0;
}

Nie zapisuje prawidlowo do pliku dane.txt tablicy 10x10 ani nie wczytuje prawidlowo z pliku.

Chce aby zapisalo oraz wczytalo i wyswietlilo tablice 10x10

1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1

P-140154
carlosmay
» 2015-11-15 13:30:33
C/C++
plik << tab[ i ][ j ] << " ";
 jak wypisujesz do pliku dane operatorem wyjścia, możesz tak samo wpisywać do tablicy operatorem wejścia.
C/C++
plik >> tab[ i ][ j ];
P-140156
zielak123
Temat założony przez niniejszego użytkownika
» 2015-11-15 13:33:56
Niestety nic nie wpisuje do pliku i odczytuje pusty plik.
P-140159
carlosmay
» 2015-11-15 15:18:03
C/C++
int tab[ 10 ][ 10 ] = {
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
    { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
};
 w ten sposób można zainicjalizować tylko nowo tworzoną tablicę, a tutaj nadpisujesz utworzoną już przez niejawny konstruktor, który utworzył obiekt 'dane'.

Aby poprawnie wczytać dane do tablicy musisz wczytywać je kolejno do elementów, np.
C/C++
for( int i = 0; i < 10; i++ ) {
    for( int j = 0; j < 10; j++ ) {
        if( i == j ) tab[ i ][ j ] = 1;
        else tab[ i ][ j ] = 0;
       
    }
}
 To powinno działać.
P-140169
zielak123
Temat założony przez niniejszego użytkownika
» 2015-11-15 17:13:49
Dzieki, teraz juz wyswietla, natomiast pozostaje kwestia przejscia do nastepnej lini po 10 znakach, bo w tej chwili wypisuje wszystko jednym ciagiem.

@Edit
Wszystko dziala.
Wystarczylo dodac
plik << endl;
po zakonczeniu 2 petli w funkcji zapisu :)
P-140172
« 1 »
  Strona 1 z 1