• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ , wczytywanie z pliku , metoda fail() .

Object Storage Arubacloud
0 głosów
359 wizyt
pytanie zadane 18 grudnia 2015 w C i C++ przez sh1nen Obywatel (1,570 p.)

Witam , piszę ponieważ po napisaniu programu całość się kompiluje bez żadnych zastrzeżeń , lecz występuje problem z wczytywanie danych z pliku , otóż po użyciu kilku metod w celu zabezpieczenia tego procesu , wywołuje się komunikat z if'a z metoda fail(). Czy mógłby ktoś wskazać mi miejsce , w którym może występować błąd ? Z góry wielkie dzieki . Oto kod : 
 

#include <iostream>/
#include <fstream>
#include <cstdlib>
#include <windows.h> 
using namespace std;

struct Pisarz
{
    int rok_urodzenia;
    char nazwisko [20];
};

struct Ksiazka
{
    char tytul [40];
    int rok_wydania;
    char rodzaj [20];
    Pisarz autor ;
};

void wczytywanie_z_pliku(Ksiazka tabks[],int rozmiar);

int main()
{
    const int = 5 ;
    Ksiazka tab[N];
    wczytywanie_z_pliku(tab,5);

    return 0;
}

void wczytywanie_z_pliku(Ksiazka tabks[], int rozmiar)
{
    int countr;
    ifstream plik;
    plik.open("ksiazka.txt",ios::in);
    if(!plik.is_open())
    {
        cout<<"Otwarcie pliku nie powiodlo sie ."<<endl;
        cout<<"Nastapi zamkniecie programu w przeciagu chwili ..."<<endl;
        Sleep(1000);
    }
    for(int i = 0 ; i < rozmiar ; i++)
    {
        countr++;
        plik.getline(tabks[i].tytul,40);
        plik.get();
        plik>>tabks[i].rok_wydania;
        plik.getline(tabks[i].rodzaj,20);
        plik.get();
        plik.getline(tabks[i].autor.nazwisko,20);
        plik.get();
        plik>>tabks[i].autor.rok_urodzenia;
    }
    if(plik.eof())
        cout<<"Koniec wczytywania danych z pliku . "<<endl;
    else if(plik.fail())
        cout<<"Blad wczytywania danych . ";
    else
        cout<<"Wczytywanie danych przerwane - przyczyna nieznana . "<<endl;
    if(countr == 0)
    {
        cout<<"Nie wczytano zadnych danych . \n"
        <<"program nie ma danych , aby przeprowadzic pozostale operacje . \n"
        <<"Nastapi zamkniecie programu .";
        exit(EXIT_FAILURE);
    }
    plik.close();
}



//oto plik txt z ktorego wczytuje dane 
/*
ksiazka.txt 
Lalka
1890
Powiesc
Prus
1847
Kamizelka
1882
Nowela
Prus
1847
Krzyzacy
1900
Powiesc
Sienkiewicz
1846
Chlopcy z Placu Broni
1906
Powiesc
Molnar
1878
Dzieci z Bulerbyn
1947
Opowiadanie
Lindgren
1907
*/

1 odpowiedź

0 głosów
odpowiedź 18 grudnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

Co to ma być? Mówiłeś, że się kompiluje wink

const int = 5 ;

Nie chcę mi się analizować kodu, ponieważ bardzo skąpo podałeś sytuację, w czasie której występuje błąd, ale pamiętaj, że koniec pliku to także błąd i metoda fail zwróci ci w takim przypadku prawdę. Może nie czyścisz gdzieś flag błędów metodą clear?

komentarz 18 grudnia 2015 przez sh1nen Obywatel (1,570 p.)
co najśmieszniejsze "tak" kompiluje się :D Ciągle zastanawiam się jak to możliwe , ale nie wyświetla ani jednego błedu . Reszta kodu wygląda ok ? Próbowałem wprowadzić  to czyszczenie flag lecz nieudolnie , nadal ten sam błąd i tablica pusta ;/
komentarz 18 grudnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

A spróbuj użyć sync - czyści bufor strumienia. Posprawdzaj także wielkość danych w wywołaniach getline.

komentarz 18 grudnia 2015 przez sh1nen Obywatel (1,570 p.)
    for(int i = 0 ; i < rozmiar ; i++)
    {
        countr++;
        plik.getline(tabks[i].tytul,40);
        plik>>tabks[i].rok_wydania;
        plik.get();
        plik.getline(tabks[i].rodzaj,20);
        plik.getline(tabks[i].autor.nazwisko,20);
        plik>>tabks[i].autor.rok_urodzenia;
        plik.get();
    }



//poprawiona petla i jest juz ok :) 
problem był z getlinem i get-em 

 

Podobne pytania

0 głosów
1 odpowiedź 8,917 wizyt
0 głosów
2 odpowiedzi 2,217 wizyt
pytanie zadane 1 lutego 2016 w Rozwój zawodowy, nauka, praca przez Pawel9922 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 842 wizyt
pytanie zadane 10 grudnia 2015 w C i C++ przez baszmest Gaduła (3,080 p.)

92,568 zapytań

141,422 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...