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

Lekcja 34 -problem z sumą

Ostatnio zmodyfikowano 2015-01-07 12:58
Autor Wiadomość
legionista
Temat założony przez niniejszego użytkownika
Lekcja 34 -problem z sumą
» 2015-01-06 20:25:53
Witam, wyliczenie sumy w poniższym zadaniu mnie przerosło, nie rozumiem czemu wychodzą mi kosmiczne liczby, po usunięciu sumy wszystko działa jak trzeba wczytywanie liczb przebiega popranie
C/C++
#include <string>
#include <fstream>
#include <iostream>


bool odczytajPlik( std::string sNazwaPliku, int suma )
{
   
    std::ifstream plik;
    plik.open( sNazwaPliku.c_str() );
    if( !plik.good() )
    {
        std::cout << "Nie udalo sie otworzyc pliku." << std::endl;
        return false;
    }
   
    while( !plik.eof() )
    {
       
        int iLiczba;
        plik >> iLiczba;
        suma = suma + iLiczba;
        if( plik.fail() )
        {
            plik.clear();
            char cZnak;
            plik >> cZnak;
            if( plik.fail() )
                 break;
           
        }
        else
       
             std::cout << iLiczba << " " << std::endl;
       
        std::cout << suma;
       
       
    }
   
}





int main()
{
    int suma = 0;
    if( odczytajPlik( "flagi.txt", suma ) );
   
    std::cout << "Plik zostal wczytany!" << std::endl;
    return 0;
   
}
P-124349
darko202
» 2015-01-07 08:24:08
w linii suma = suma + iLiczba;
używasz zmiennej iLiczba, której wartość jest nieznana
(sprawdź czy była zainicjalizowana)
prawdopodobnie jakaś zmienna globalna - używanie takich zmiennych jest niewskazane bo prowadzi często do trudnych do zdiagnozowania błędów, a najczęściej (99,9%) nie są konieczne.

P-124375
legionista
Temat założony przez niniejszego użytkownika
» 2015-01-07 11:41:10
Czemu iLiczba jest nie znana
czy nie jest to liczba, która został odczytana z pliku ?
C/C++
int iLiczba;
plik >> iLiczba;
suma = suma + iLiczba;
P-124381
darko202
» 2015-01-07 12:58:38
Sorry, źle spojrzałem

podstawowe pytanie co masz faktycznie w pliku
i co jest wczytywane do zmiennej iLiczba

1. dodaj
cout << iLiczba << "\n";  //najprostsze debugowanie programu

2.
jeśli w
plik >> iLiczba
wczytujesz znak np. spacja (niewidoczny) to ma on jakiś kod ASCI, który
po konwersji na typ int (niejawnej) ma jakąś wartość  (nie pamiętam ile ale dla a, A mamy chyba 65, 95 )
i jak dodamy sobie N razy taką wartość to i zbierze się odpowiednia duża liczba



  
P-124383
« 1 »
  Strona 1 z 1