[Poziom 4 Lekcja 34] Zadanie lekko tuningowane - Zawieszenie programu po wczytaniu mix'a liter ze znakami.
Ostatnio zmodyfikowano 2014-01-08 20:18
Krump Temat założony przez niniejszego użytkownika |
» 2013-12-29 17:34:56 Zobacz ten dzisiejszy, bo on prawie działa (źle mi się wkleił już jest dobry). A pierwszy kod to ten z poprawkami DejaVu #include <iostream> #include <fstream> #include <stdlib.h> #include <string> #include <conio.h>
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; } }
bool czyNapotkanoZnakSpacji( 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 == ' ' ) return true; } };
int main( int argc, char ** argv ) { ifstream plik; int suma = 0, wiersz = 1, liczba = 0, suma_bledow = 0; plik.open( "text.txt" ); if( !plik.good() ) { cout << "Nie udalo sie otworzyc pliku :/ "; getch(); return false; } while( !plik.eof() ) { if( czyNapotkanoZnakNowegoWiersza( plik ) ) { cout << "Suma liczb w " << wiersz << " wierszu to: " << suma << " Liczba bledow to: " << suma_bledow << endl; suma_bledow = suma = 0; wiersz++; } else { plik.clear(); if( plik >> liczba ) { suma += liczba; } else { suma_bledow++; plik.clear(); plik.get(); } } } plik.close(); getch(); return 0; }
Co nie działa: Jak mamy w pliku linijkę: 2d3 2 4, to sumuje liczby, czyli jest 11 i błędów jeden. A powinien dać sumę 6 i błąd 1, bo 2d3 to jeden wyraz, np. liczba w heksadecymalnym. Nie sprawdza ostatniej linijki w pliku. |
|
Krump Temat założony przez niniejszego użytkownika |
» 2014-01-03 12:14:59 Ja tak tylko się przypomnieć. |
|
pekfos |
» 2014-01-03 15:42:46 Jeśli udaje się wczytać, sprawdzaj, czy dalej stoi biały znak. Jeśli nie udaje się, czyść do białego znaku. |
|
Krump Temat założony przez niniejszego użytkownika |
» 2014-01-08 18:58:23 Znaczy tym peek'iem? Tak jak zrobiłem w jednym z kodów? |
|
pekfos |
» 2014-01-08 20:18:43 Podobnie. |
|
1 2 3 « 4 » |