Zadanie lekcja 34 [trudne zadanie]
Ostatnio zmodyfikowano 2015-01-14 22:14
dafuck17 Temat założony przez niniejszego użytkownika |
Zadanie lekcja 34 [trudne zadanie] » 2015-01-14 22:04:22
#include <iostream> #include <string> #include <fstream> using namespace std;
bool czyNapotkanoZnakNowegoWiersza( std::ifstream & plik ) { char cZnak; for(;; ) { plik.clear(); cZnak = plik.peek(); if( plik.fail() || plik.bad() ) return false; if( !isspace( cZnak ) ) return false; plik.get( cZnak ); if( plik.fail() || plik.bad() ) return false; if( cZnak == '\n' ) return true; } }
void wczytajLiczby() { std::ifstream plik; plik.open( "D:\\zadanie34.txt" ); if( plik.good() ) { cout << "Otworzono plik domyslnie!" << endl; } else { cout << "Nie znaleziono pliku" << endl; return; } int suma = 0; int wiersz = 1; while( !plik.eof() ) { int liczba; plik >> liczba; if( plik.fail() ) { plik.clear(); plik.get(); cout << "napotkano blad w wierszu nr: " << wiersz; continue; } if( plik.bad() ) { plik.clear(); plik.get(); cout << "Napotkano blad w wierszu nr: " << wiersz; continue; } suma += liczba; if( czyNapotkanoZnakNowegoWiersza( plik ) ) { if( plik.fail() || plik.bad() ) cout << "Mamy bledy" << endl; else cout << suma << endl; suma = 0; wiersz++; } } }
int main() { wczytajLiczby(); return 0; }
Wydaje mi się że kod jest ok oprócz jednej rzeczy... W 2 linijce tekstu powinno być "Bledne dane w wierszu nr 2!". Mój program wypisuje komunikat ale wraz z nim liczy sumę, której nie powinien liczyć gdy nie udało mu się wczytac wszystkich liczb. Myślałem nad tym ale nie znalazłem sposobu żeby jakoś to pominąć... |
|
darko202 |
» 2015-01-14 22:14:15 wychwytujesz błąd, ale nie przechowujesz tego faktu w dodatkowej zmiennej logicznej to powoduje, że nie wiadomo, czy w danej linii błąd wystąpił, czy nie |
|
« 1 » |