[C++][fstream] Nieudany odczyt danych z pliku za pomocą strumienia >>
Ostatnio zmodyfikowano 2014-05-16 21:41
pekfos |
» 2014-05-16 20:55:51 temp_wynik[ i ] = temp_znak;
|
Przekraczasz zakres. |
|
Caspinos Temat założony przez niniejszego użytkownika |
» 2014-05-16 20:57:26 Kod całego programu: #include <iostream> #include <fstream> #include <string> using namespace std;
bool deszyfruj( ifstream & tekst, ifstream & klucze, ofstream & wynik ); bool deszyfruj_plik( string plik_tekst, string plik_klucze, string plik_wynik );
int main() { deszyfruj_plik( "sz.txt", "klucze2.txt", "wynik4b.txt" ); return 0; }
bool deszyfruj_plik( string plik_tekst, string plik_klucze, string plik_wynik ) { ifstream tekst; tekst.open( plik_tekst.c_str() ); ifstream klucze; klucze.open( plik_klucze.c_str() ); ofstream wynik; wynik.open( plik_wynik.c_str() ); if( !tekst.good() || !klucze.good() || !wynik.good() ) { cout << "Blad podczas wczytania ktoregos z plikow!" << endl; return false; } if( deszyfruj( tekst, klucze, wynik ) ) { cout << "Deszyfracja zakonczona powodzeniem!" << endl; return true; } else { cout << "Deszyfracja zakonczona niepowodzeniem!" << endl; return false; } }
bool deszyfruj( ifstream & tekst, ifstream & klucze, ofstream & wynik ) { string temp_wyraz; string temp_klucz; string temp_wynik; int temp_znak; while( tekst >> temp_wyraz && klucze >> temp_klucz ) { int j = 0; for( int i = 0; temp_wyraz[ i ] != '\0'; i++ ) { j++; if( temp_klucz[ j ] == '\0' ) j = 0; temp_znak =( int ) temp_wyraz[ i ] +(( int ) temp_klucz[ j ] - 64 ); if( temp_znak > 90 ) temp_znak -= 26; temp_wynik[ i ] = temp_znak; } cout << "d: " << temp_wynik << endl; } if( tekst.eof() || klucze.eof() ) return true; else return false; }
Fragment danych wejściowych w pliku sz.txt QGM ITKK ULJ QEG ZFXG XAX HWJE EMKD MACPJ DOW AVDKAHAUFAC QPUBRYGIINPHZP OXBSAEAJDMN ANHSPZYQF
|
Fragment danych wejściowych w pliku klucze2.txt FRS SKFR RWQ CVD LKDF VFD VBTD ERUC BDTOP AJK PGPNV QOT DIP KECAS XWCEZ IYR
|
Tak jak wspomniałem wcześniej program wykonuje pętlę while w funkcji deszyfruj kilkadziesiąt razy, po czym się zawiesza. Przy każdym wywołaniu pętli program wypisuje "d: " ale zmienna temp_wynik albo jest pusta (albo się nie wyświetla). |
|
Monika90 |
» 2014-05-16 21:32:57 Pekfos ci napisał co jest źle. String temp_wynik jest pusty, zatem temp_wynik[i] to odwoływanie się poza zakresem. Możesz dodawać znaki na końcu stringa za pomocą temp_wynik.push_back(temp_znak); tylko przenieś deklarację temp_wynik tuż przed pętlę for.
|
|
Caspinos Temat założony przez niniejszego użytkownika |
» 2014-05-16 21:41:27 Pekfos ci napisał co jest źle.
|
Racja, dopiero teraz zaskoczyłem o co chodzi. Wszystkim zaangażowanym serdeczne dziękuję za pomoc. |
|
1 « 2 » |