[Poziom 4 Lekcja 34] Zadanie lekko tuningowane - Zawieszenie programu po wczytaniu mix'a liter ze znakami.
Ostatnio zmodyfikowano 2014-01-08 20:18
pekfos |
» 2013-12-26 20:43:43 Sprawdź? Tak dużo roboty nie ma, z przeniesieniem kawałka kodu w inne miejsce. I zmienieniem kilku nazw, jeśli chcesz poprawiać wszystko, o czym napisałem. |
|
Krump Temat założony przez niniejszego użytkownika |
» 2013-12-26 21:37:00 Kombinuje, ale dalej mi nie idzie. Program wczytuje liczbę 1d3 jako 1 potem d które traktuje jako błąd i się zawiesza. A powinien to razem wczytać i uznać jako błąd.
Nie wiem nie mogę sobie z tym poradzić, ciągle coś nie tak. |
|
pekfos |
» 2013-12-26 22:36:56 Kod? |
|
Krump Temat założony przez niniejszego użytkownika |
» 2013-12-26 23:54:27 #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 ) { plik >> liczba; if( !czyNapotkanoZnakspacji( plik ) ) plik.get(); if( plik.fail() ) { plik.clear(); liczba = 0; suma_bledow++; } suma += liczba; if( liczba == 0 || czyNapotkanoZnakNowegoWiersza( plik ) || plik.eof() ) { cout << "Suma liczb w " << wiersz << " wierszu to: " << suma << " Liczba bledow to: " << suma_bledow << endl; suma = 0; wiersz++; suma_bledow = 0; } } plik.close(); getch(); return 0; } |
|
DejaVu |
» 2013-12-27 08:53:15 for(;; ) { plik >> liczba; if( plik.eof() ) break; } |
|
Krump Temat założony przez niniejszego użytkownika |
» 2013-12-27 14:05:17 Ale: for(;; ) { plik >> liczba; if( plik.eof() ) break; }
while( !plik.eof() ) { plik >> liczba; }
while( plik ) { plik >> liczba; }
To to samo przecież, czy źle myślę? DejaVu nawet jeśli, zrobiłem tak jak poradziłeś, ale to nie rozwiązuje problemu z blokowaniu się programu na wyrazie 1d3. Zawsze używałem while() w pierwotnym programie i nigdy nie było problemu z zakańczaniem wczytywania danych. |
|
pekfos |
» 2013-12-27 16:38:33 To to samo przecież, czy źle myślę? |
Jeśli wywalić resztę kodu, to jest to, mniej więcej, to samo. DejaVu nawet jeśli, zrobiłem tak jak poradziłeś, ale to nie rozwiązuje problemu z blokowaniu się programu na wyrazie 1d3. |
Bo nie poprawiłeś reszty funkcji. |
|
Krump Temat założony przez niniejszego użytkownika |
» 2013-12-27 18:21:29 To jak to zrobić? Nie mogę sobie z tym poradzić już. Zanim napisałem tutaj męczyłem się parę dni z tym. |
|
1 « 2 » 3 4 |