funkcjia bool

0

Ogolnie funkcja inicjalizuje liste studentow danymi wczytanymi z pliku oraz srednia obliczona dla danego studenta.

 
bool wczytaj(const string nazwa_pliku, Lista &lista)
{
    bool ok = true, tab = false; 
    ifstream in(nazwa_pliku.c_str()); // daje możliwość przekazania tekstu do funkcji, która jako argument przyjmuje wartość char * (czyli razem z bialymi znakami )
    if(!in)
    {
        cerr << "Nie mozna otworzyc pliku!" << endl;
        return false;   
    }    
    else
    {
        if(!in.good()) ok = false; else                       /*Dlaczego tutaj jest przypisany false// wczesniej zainicjalizowana zmienna byla przeciez true czemu nie moglo tak zostac? Lub uzycie zmiennej tab zamiast ok*/
           in >> lista.przedmiot;        
        if(!in.good()) ok = false; else
           in >> lista.liczba;
        if (lista.liczba > 0)
        {
            lista.lista = new Student[lista.liczba];
            tab = true;                                                /*dlaczego tu jest przypisywane true  // wczesniej zainicjalizowana zmienna byla przeciez false czemu nie moglo tak zostac? */
            for(unsigned int i = 0; i < lista.liczba; i++)
            {
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].nazwisko;   
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].imie;  
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].nr_indeksu;  
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].t;  
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].p;      
                 lista.lista[i].srednia = srednia(lista.lista[i].t, lista.lista[i].p);
            }            
        }
    }
    in.close();
    if (!ok)
    {
        if(tab)
            usun(lista);
        return false;    
    }
    else
       return true;
}
0

Na końcu nie dałeś

return

.
jeżeli o to chodzi a tak w ogóle to nie zadałeś pytania!

0

Chciałem by ktoś mi na te dwa komentarze odpowiedział ;p. (Return true jest przeciez to po co drugi return)

0

Zmienna ok jest do sprawdzania czy wczytywanie wartości z pliku powiodło się. Potem zwracasz boola z tej funkcji. Tab używasz do sprawdzania czy zaalokowano pamięć, żeby potem ją zwolnić.

0

Nie potrafie tego zrozumiec . Jakbys ktos mogl ogolnie bardzo dokladnie opisac tego boola

0
bool wczytaj(const string nazwa_pliku, Lista &lista)

Czemu nie tak?

Lista wczytaj(const string &nazwa_pliku)

Po skopiowaniu stały czy nie bez większej różnicy, natomiast różnica jest przy przekazywaniu przez referencję.
Nie potrzeba mieć żadnego boola, ponieważ to czy się udało możesz określić na podstawie zawartości listy (list.empty()). No i z RVO to w ogóle sielanka.

0

Moglby ktos napisac jak to dokladnie przeczytac bo mam problem

 if(!in.good()) ok = false; else 
Jesli plik nie jest otwarty (bo jest !) to ustawiamy ok na false ?
   if(!in.good()) ok = false; else
                     in >> lista.lista[i].nazwisko;   
                 if(!in.good()) ok = false; else        // Dlaczego za kazdym razem jest sprawdzane czy plik otwarty jest ? //
                     in >> lista.lista[i].imie;           // Pytanie skad wiem z ktorej linii z pliku txt pobiera mi do struktury ? na jakiej zasadzie to dziala?
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].nr_indeksu;  
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].t;  
                 if(!in.good()) ok = false; else
                     in >> lista.lista[i].p;
 
2

stream.good() to nie jest sprawdzenie, czy plik jest otwarty, tylko czy wszystko jest z nim okej - i.e. nie została ustawiona żadna flaga błędu.
Ta zmienna ok jest ustawiana na false, bo zapewne jeśli coś się nie udało to nie jest ok.

A odnośnie reszty: potrzebujesz elementarnego zrozumienia strumieni - poszukaj dokumentacji / tutoriala, bo chyba nikt Ci ich nie wyłoży tutaj całości;

PS. Nie wiem czy to tylko moje wrażenie, ale cały ten kod wygląda jak kupa śmieci.

0

Polecasz jakas ksiazke obecnie czytam symfonie i jakos nie znalazlem nic o tym .

0

W zasadzie to nie. Polecam dokumentacje ;-)

0

Język C++ Szkoła Programowania Stephen Prata.

1 użytkowników online, w tym zalogowanych: 0, gości: 1