Problem z zapisywaniem danych w pliku tekstowym
Ostatnio zmodyfikowano 2016-02-07 13:36
Wlossy Temat założony przez niniejszego użytkownika |
Problem z zapisywaniem danych w pliku tekstowym » 2016-02-07 03:16:14 Witam! Mam problem z zapisywaniem danych a pliku tekstowym. Problem występuje w przypadku "case 1", gdzie program ma wczytywać zaszyfrowany tekst do pliku txt. Będę wdzięczny za pomoc. Oto kod źródłowy: #include <iostream> #include <fstream> #include <cstring>
using namespace std;
main() { int przypadek, i, b, c; const short rozmiar = 50; char text[ rozmiar ]; cout << "Enigma by Anonim" << endl << endl << endl; cout << "1. Szyfrowanie" << endl << "2. Deszyfrowanie" << endl << "3. Zakoncz" << endl << endl; cout << endl; poczatek: cin >> przypadek; cout << endl; switch( przypadek ) { case 1: { cout << "Wprowadz tekst: " << endl << endl; cin.ignore(); cin.getline( text, rozmiar ); cout << endl << endl; b = 0; for( i = 0; text[ i ] != '\0'; i++ ) { b = 3; text[ i ] = text[ i ] + b; } cout << "Tekst zaszyfrowany: " << endl << endl << text << endl << endl; cout << "1. Szyfrowanie" << endl << "2. Deszyfrowanie" << endl << "3. Zakoncz" << endl << endl; cout << endl; ofstream plik( "post.txt" ); plik.open( "post.txt", ios::out ); for( i = 0; text[ i ] != '\0'; i++ ) plik << text[ i ]; plik.close(); goto poczatek; } case 2: { ifstream plik( "post.txt" ); if( !plik ) { cout << "Nie mozna otworzyc pliku." << endl; cout << "Wprowadz kod: "; cin.ignore(); cin.getline( text, rozmiar ); } i = 0; while( !plik.eof() ) plik >> text[ i++ ]; plik.close(); b = 0; for( i = 0; text[ i ] != '\0'; i++ ) { b = 3; text[ i ] = text[ i ] - b; } cout << "Tekst rozszyfrowany: " << endl << endl << text << endl << endl; cout << "1. Szyfrowanie" << endl << "2. Deszyfrowanie" << endl << "3. Zakoncz" << endl << endl; cout << endl; goto poczatek; } case 3: { break; } } } |
|
carlosmay |
» 2016-02-07 08:36:11 goto najgorsze możliwe rozwiązanie. To samo można osiągnąć pętlą. Jest możliwe, że wprowadzony tekst usuwa std::cin.ignore i do pliku nie ma co zapisać. edit: sprawdziłem dokładniej. ofstream plik( "post.txt" ); plik.open( "post.txt", ios::out );
|
Program działa poprawnie. Sprawdź czy plik jest poprawnie otwierany. |
|
Wlossy Temat założony przez niniejszego użytkownika |
» 2016-02-07 10:37:25 Plik nie jest poprawnie otwierany. U Ciebie wszystko działa właściwie?
Sprawdziłem inny program oparty na bibliotece fstream i również nie może uzyskać dostępu do pliku. Najprawdopodobniej jest to spowodowane tym, że nie mam na tym komputerze uprawnień administratora, jednak program spełniający taką samą funkcję, a oparty na bibliotece stdio.h i działa już poprawnie. To wydaje mi się trochę dziwne. Wie ktoś może czym jest to spowodowane? |
|
carlosmay |
» 2016-02-07 12:25:08 Plik nie jest poprawnie otwierany. U Ciebie wszystko działa właściwie? |
Po usunięciu pierwszego otwierania. Była wskazówka co jest nie tak. std::ofstream plik; plik.open( "post.txt", ios::out ); if( plik.is_open() ) { } else { } |
|
jankowalski25 |
» 2016-02-07 13:24:51 @carlosmayWyjątków w to nie mieszaj. Można je włączyć, ale trzeba mieć świadomość tego, co się robi. Możesz to nazwać obsługą błędu albo jakoś podobnie, ale w tym przypadku nie używaj słowa wyjątek. |
|
Wlossy Temat założony przez niniejszego użytkownika |
» 2016-02-07 13:36:06 Dzięki za pomoc, problem rozwiązany. :) |
|
« 1 » |