Lekcja 34 - wczytywanie liczb z pliku
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Lekcja 34 - wczytywanie liczb z pliku

AutorWiadomość
Temat założony przez niniejszego użytkownika
Lekcja 34 - wczytywanie liczb z pliku
» 2018-02-11 21:54:58
Rozwiązywałem zadanie z lekcji 34.

"Napisz program, który dla każdego wiersza w pliku:
wczyta liczby i wypisze ich sumę w przypadku, gdy wszystkie liczby uda się wczytać;
wypisze komunikat o błędnych danych, jeżeli wystąpi błąd podczas wczytywania liczb (komunikat ma wyświetlać numer wiersza, w którym wystąpił błąd)."

Nie rozumie co robi tutaj linijka getline(plik, linie);
Bo program nie działał mi prawidłowo jak miałem zamiast tego plik.get(); dobrze liczył gdzie sa linie, ale zliczał mi drugi wiersz. Poszukałem porad i znalazłem podobny tylko z getline. Poprostu zapisuje taki spam do zmiennej string jak był bład?

C/C++
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

bool czy( ifstream & plik )
{
    char cZnak;
    for(;; ) //nieskoñczona pêtla
    {
        plik.clear();
        cZnak = plik.peek(); //sprawdzamy jaki kolejny znak zostanie zwrócony przez operacjê odczytu
        if( plik.fail() || plik.bad() )
             return false; //wyst¹pi³ b³¹d odczytu danych
       
        if( !isspace( cZnak ) )
             return false; //pobrany znak nie jest bia³ym znakiem
       
        plik.get( cZnak ); //odczytujemy bia³y znak z pliku
        if( plik.fail() || plik.bad() )
             return false; //wyst¹pi³ b³¹d odczytu danych
       
        if( cZnak == '\n' )
             return true;
       
    } //for
}

void odczytwierszy( ifstream & plik )
{
    string linie;
    int wiersz = 1;
    int liczba = 0;
    int suma = 0;
    plik.clear();
    while( !plik.eof() )
    {
        plik >> liczba;
        suma += liczba;
        if( plik.fail() )
        {
            cout << "Napotkano blad w wierszu nr." << wiersz << endl;
            plik.clear();
            getline( plik, linie );
            suma = 0;
           
        } //if
        else
        {
            if( czy( plik ) )
            {
                cout << suma << endl;
                wiersz++;
                suma = 0;
            }
        }
       
       
    } // while
   
}

void odczytajplik( string nazwa )
{
    ifstream plik;
    plik.open( nazwa.c_str() );
    if( !plik.good() )
    {
        cout << "Nie udalo sie wczytac pliku!" << endl;
    } else
    {
        cout << "Plik wczytano poprawenie!" << endl;
        odczytwierszy( plik );
    }
}

int main()

{
    odczytajplik( "c:\\2zad34.txt" );
   
    return 0;
}
[ cpp ]
P-169370
» 2018-02-12 07:40:24
Funkcja getline doczytuje dane do końca wiersza od miejsca wystąpienia błędu odczytu danych. Nigdzie więcej program nie używa zmiennej linie.
Zamiast dodatkowej zmiennej i funkcji getline można użyć ignore dla strumienia plikowego.
P-169373
« 1 »
 Strona 1 z 1