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

Problem, jak działa ten return /.?

Ostatnio zmodyfikowano 2014-08-29 11:53
Autor Wiadomość
ChomikPL
Temat założony przez niniejszego użytkownika
Problem, jak działa ten return /.?
» 2014-08-29 10:41:00
Witajcie, oto kod do zadania domowego z lekcji 33:

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



bool otworzPlik()
{
    std::ifstream plik;
    plik.open( "plik.txt" );
   
    if( !plik.good() )
    {
        return false;
    }
   
    return true;
   
}


int policz()
{
    std::ifstream plik;
    plik.open( "plik.txt" );
    if( otworzPlik() )
    {
       
        int liczba;
        int suma = 0;
        while( true )
        {
            plik >> liczba;
           
            suma += liczba;
            if( !plik.good() )
                 break;
           
           
           
        } //while
        //std::cout << suma << std::endl; TU PODAWANA JEST POPRAWNA SUMA
        return suma;
    }
    std::cout << "Nie wczytano pliku";
}



int main()
{
    otworzPlik();
    std::cout << policz(); // TU SUMA WYCHODZI ZAWSZE 4077712 choć powinno być 18
   
   
}


Fukncja "policz()" powinna zwracać wartość obiektu suma, jednak zwraca stałą wartość 4077712, dlaczego ?
P-116352
pekfos
» 2014-08-29 11:18:47
A co zwraca, jak nie udało się otworzyć pliku? I po co otwierasz 2 razy ten sam plik?
P-116353
Monika90
» 2014-08-29 11:33:58
C/C++
plik >> liczba;

suma += liczba;
wczytujesz liczbę ale nie sprawdzasz czy się ta operacja udała, zawsze ją dodajesz do sumy, a powinienś dodawać tylko wtedy gdy wczytywanie się powiodło.

najlepiej tak napisać taką pętlę
C/C++
suma = 0;
while( plik >> liczba )
     suma += liczba;

P-116354
ChomikPL
Temat założony przez niniejszego użytkownika
» 2014-08-29 11:35:37
Otwieram 2 raz, bo jak nie otworze to w funkcji policz stwierdza ze nie ma zmiennej plik ...

Hmmm no własnie wtedy nie zwraca :F to jest przyczyną wypisywania takiej wartości ?
P-116355
ChomikPL
Temat założony przez niniejszego użytkownika
» 2014-08-29 11:38:43
Monika:

Trafna sugestia, od teraz tak bede robil ta petle, też o tym myślałem, dlatego pierwotnie w tym miejscu pisałem:

C/C++
plik >> liczba;

if( !plik.good() )
     break;

suma += liczba;
ale wtedy nie wczytywało w ogole ostatniej wartości z pliku... dlatego zamieniłem to miejscami.
P-116356
Monika90
» 2014-08-29 11:42:09
Otwieram 2 raz, bo jak nie otworze to w funkcji policz stwierdza ze nie ma zmiennej plik ...
Otwierasz 3 razy. Funkcja otworzPlik jest zbędna.
P-116357
ChomikPL
Temat założony przez niniejszego użytkownika
» 2014-08-29 11:43:58
Nom, przemyslalem to. Racja. A co z moim returnem ??
P-116358
Monika90
» 2014-08-29 11:48:33
Jak zachowuje się twój program?
Wyświetla
4077712
,
czy być może
Nie wczytano pliku4077712
?

P-116359
« 1 » 2
  Strona 1 z 2 Następna strona