Rozdział 34- zadanie 1. Integer czytany jako char.
Ostatnio zmodyfikowano 2017-12-05 21:19
krzychna Temat założony przez niniejszego użytkownika |
Rozdział 34- zadanie 1. Integer czytany jako char. » 2017-12-05 18:25:24 Cześć, z nieznanego mi powodu jedną z liczb mój program czyta jako char. Prosiłbym o pomoc w znalezieniu błędu. Z góry dziękuję. Kod: #include "stdafx.h" #include <cstdio> #include <iostream> #include <cstdlib> #include <ctime> #include <string> #include <fstream> using namespace std;
bool odczytajLiczbe( ifstream & plik, int & iLiczba, int & wynik ) { plik.clear(); plik >> iLiczba; if( plik.bad() ) { plik.close(); return false; } if( plik.fail() ) { return false; } cout << "Liczba = " << iLiczba << endl; wynik += iLiczba; return true; }
bool odczytajZnak( ifstream & plik, char & cZnak ) { plik.clear(); plik >> cZnak; if( plik.bad() ) { return false; } if( plik.fail() ) { return false; } cout << "Znak = " << cZnak << endl; return true; }
bool odczytajplik( string & sciezka ) { cout << "Odczytaj plik" << endl; ifstream plik; int wynik = 0; plik.open( sciezka.c_str() ); if( !plik.good() ) { return false; } while( !plik.eof() ) { int iLiczba; char cZnak; plik.clear(); if( !odczytajLiczbe( plik, iLiczba, wynik ) && plik.bad() ) { cout << "Bad liczba" << endl; return false; } if( !odczytajZnak( plik, cZnak ) ) { if( plik.bad() ) { cout << "Bad znak" << endl; return false; } cout << "Suma = " << wynik << endl; cout << "Koniec pliku" << endl; break; } } return true; }
int main() { string sciezka = "C:/Users/Krzyniu/Documents/GitHub/Programs/pliki/liczby.txt"; if( !odczytajplik( sciezka ) ) { cout << "Nie udalo sie odczytac pliku" << endl; } cout << "Odczytano plik" << endl; system( "pause" ); return 0; } Dane wejściowe: a 1 2 321 ac.de ef#@g 5 #3 Dane wyjściowe: Odczytaj plik Znak = a Liczba = 1 Znak = 2 Liczba = 321 Znak = a Znak = c Znak =. Znak = d Znak = e Znak = e Znak = f Znak = # Znak = @ Znak = g Liczba = 5 Znak = # Liczba = 3 Suma = 330 Koniec pliku Odczytano plik
Co więcej gdy wprowadzę takie dane wejściowe: a 1 321 ac.de ef#@g 5 #3 Otrzymuję taką odpowiedź: Odczytaj plik Znak = a Liczba = 1 Znak = 3 Liczba = 21 Znak = a Znak = c Znak =. Znak = d Znak = e Znak = e Znak = f Znak = # Znak = @ Znak = g Liczba = 5 Znak = # Liczba = 3 Suma = 30 Koniec pliku Odczytano plik
|
|
pekfos |
» 2017-12-05 19:49:53 Zawsze próbujesz wczytać znak. |
|
krzychna Temat założony przez niniejszego użytkownika |
» 2017-12-05 21:19:47 Poprawiłem, działa - jeżeli coś jest niezgodnie z sztuką to proszę o krytykę :) #include "stdafx.h" #include <cstdio> #include <iostream> #include <cstdlib> #include <ctime> #include <string> #include <fstream> using namespace std;
bool odczytajLiczbe( ifstream & plik, int & iLiczba, int & wynik ) { plik.clear(); plik >> iLiczba; if( plik.bad() ) { plik.close(); return false; } if( plik.fail() ) { return false; } cout << "Liczba = " << iLiczba << endl; wynik += iLiczba; return true; }
bool odczytajZnak( ifstream & plik, char & cZnak ) { plik.clear(); plik >> cZnak; if( plik.bad() ) { return false; } if( plik.fail() ) { return false; } cout << "Znak = " << cZnak << endl; return true; }
bool odczytajplik( string & sciezka ) { cout << "Odczytaj plik" << endl; ifstream plik; int wynik = 0; plik.open( sciezka.c_str() ); if( !plik.good() ) { return false; } while( !plik.eof() ) { int iLiczba; char cZnak; plik.clear(); if( !odczytajLiczbe( plik, iLiczba, wynik ) && plik.bad() ) { cout << "Bad liczba" << endl; return false; } if( plik.fail() &&!odczytajZnak( plik, cZnak ) ) { if( plik.bad() ) { cout << "Bad znak" << endl; return false; } break; } } cout << "Suma = " << wynik << endl; cout << "Koniec pliku" << endl; return true; }
int main() { string sciezka = "C:/Users/Krzyniu/Documents/GitHub/Programs/pliki/liczby.txt"; if( !odczytajplik( sciezka ) ) { cout << "Nie udalo sie odczytac pliku" << endl; } cout << "Odczytano plik" << endl; system( "pause" ); return 0; }
|
|
« 1 » |