Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z plikiem tekstowym


Rekomendowane odpowiedzi

Opublikowano
struct losowanie
{
    string linia1;
    string linia2;
    string linia3;
    string linia4;
};
...
void losuj()
{
    ifstream plik_odczyt;
    plik_odczyt.open( "test.txt" );

    losowanie dane[ 5 ];

    while( !plik_odczyt.eof() )
    {
        for( int i = 0; i < 5; i++ )
        {
            getline( plik_odczyt, dane[ i ].linia1 );
            getline( plik_odczyt, dane[ i ].linia2 );
            getline( plik_odczyt, dane[ i ].linia3 );
            getline( plik_odczyt, dane[ i ].linia4 );
        }

        if( plik_odczyt.eof() )
            break;
    }
    plik_odczyt.close();

    fstream plik;
    plik.open( "test.txt" );

    for( int i = 0; i < 5; i++ )
    {
        plik << dane[ i ].linia1 << endl;
        plik << dane[ i ].linia2 << endl;
        plik << dane[ i ].linia3 << endl;
        plik << dane[ i ].linia4 << endl;
    }

    plik.close();
}
...

Witam, otóż problem polega na tym, że zawsze gubi mi dane[ 0 ].linia1, jest ona po prostu pusta. Ilość wierszy w pliku jest zawsze 20. W main tylko ja raz wywołuje i do niczego się nie odwołuje. 

Z góry dzięki.

Opublikowano

@up, Dzięki, masz rację, a jeszcze jedna rzecz tym razem dotycząca plików "*.dat".

 

 

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

struct osoba
{
    int indeks;
    char imie[ 15 ];
    char nazwisko[ 15 ];
    int punkty;
    float procenty;
};

int main()
{
    ifstream plik( "dane.dat" );

    osoba dane;

	for( int i = 1; ; i++ )
    {
		plik.read( reinterpret_cast<char*>( &dane ), sizeof( osoba ) );

		if( plik.eof() )
            break;

		cout << i << ". " << dane.nazwisko << " " << dane.imie << endl;
    }
	plik.close();

}

Przy danych:

1 Cezary Lubek 13 0.8666
2 Tomek Kowalski 8 0.5333
3 Adam Nowak 15 1
4 Kamil Bogdyniuk 6 0.4
5 Tomek Krysiak 11 0.7333
6 Krystian Adamiuk 14 0.9333

 
Podczas wyświetlania danych czyta po ilości znaków w strukturze imię i nazwisko, a chciałbym aby zakańczało czytanie jednej zmiennej na "spacji". 
Czy ktoś wie jak to rozwiązać?
Opublikowano

Jeśli nie potrzebujesz, aby imię i nazwisko miało DOKŁADNIE 15 znaków to korzystaj z std::string.

Strumienie (a fstream jest strumieniem tak samo jak cout) mają przeciążone odpowiednie operatory, które pozwalają na łatwe zapisywanie/ekstrakcję danych. Do pewnego stopnia można korzystać z fstream tak jak z cin

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...