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

[Lekcja34] Pomijanie znaku char

Ostatnio zmodyfikowano 2014-12-28 13:30
Autor Wiadomość
legionista
Temat założony przez niniejszego użytkownika
[Lekcja34] Pomijanie znaku char
» 2014-12-27 19:18:56
Witam, mógłby mi ktoś wytłumaczyć czemu taki zapis jest niepoprany, przerywa pętle
break;
 ; gdy napotyka na znak. Jednak przy natrafieniu na znak zwraca true i na tym sie to kończy, czy nie można tego wykonać bez deklaracji chara ?
2 pytanie moja suma zapisana w ten sposób przy zmianie kodu (deklaracja char tak jak w rozdziale)zwraca dziwne wartości. Co robię źle?
C/C++
#include <string>
#include <fstream>
#include <iostream>

bool wczytajLiczbe( std::ifstream & plik, int & iLiczba, int & suma )
{
    plik.clear(); //Wyczyszczenie ewentualnych flag błędów
    plik >> iLiczba;
    if( plik.bad() )
    {
        std::cout << "Wystapil blad sprzetowy!" << std::endl;
        plik.close();
        return false;
    } else
    if( plik.fail() )
    {
       
        return false;
    } else
         std::cout << iLiczba << " ";
   
    suma += iLiczba;
   
    return true;
}



bool odczytajPlik( std::string sNazwaPliku )
{
    std::ifstream plik;
    plik.open( sNazwaPliku.c_str() );
    int suma = 0;
   
    if( !plik.good() )
    {
        std::cout << "Nie udalo sie otworzyc pliku." << std::endl;
        return false;
    } //if
    while( !plik.eof() )
    { int iLiczba;
       
       
        if( !wczytajLiczbe( plik, iLiczba, suma ) && plik.bad() )
             return false; //wczytanie liczby nie powiodło się z powodu błędu sprzętowego
        else
             break; //nie ma więcej danych w strumieniu (bo jeden znak zawsze powinno się dać odczytać)
       
       
        std::cout << std::endl << " suma " << suma;
       
    } std::cout << std::endl << " suma " << suma;
    plik.close();
    return true;
}

int main()
{
    if( odczytajPlik( "flagi.txt" ) )
   
   
         return 0;
   
}
P-123383
darko202
» 2014-12-27 23:53:51
1.
 while( !plik.eof() )
    { int iLiczba; // to jest błąd
    ....
}       

2.
  zakładam że o to pytasz
        if( !wczytajLiczbe( plik, iLiczba, suma ) && plik.bad() )
             return false; //wczytanie liczby nie powiodło się z powodu błędu sprzętowego
 
  wczytaleś znak i mamy 
  np   
   !false && true == true
  stąd dalej return ....
 

technika debagowanie stanu zmiennych Ci się kłania
bez tego tracisz czas, nerwy, itp...
P-123413
legionista
Temat założony przez niniejszego użytkownika
» 2014-12-28 13:23:21
Faktycznie masz racje, przez ostatnie rozdziały bardzo trudno przechodzę, możesz polecić mi konkretny rozdział lub materiał dotyczący debagowania stanu zmiennych? Tym razem Google nie poratowało.
P-123433
DejaVu
» 2014-12-28 13:30:30
Jeden temat = jeden problem.
P-123436
« 1 »
  Strona 1 z 1