Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z zapisywaniem danych w pliku tekstowym

Ostatnio zmodyfikowano 2016-02-07 13:36
Autor Wiadomość
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:

C/C++
#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; }
       
    }
   
   
}
P-144566
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.
C/C++
ofstream plik( "post.txt" ); // otwiera plik
plik.open( "post.txt", ios::out ); // ponownie otwiera plik
// brakuje sprawdzenie poprawnosci otwierania pliku
Program działa poprawnie. Sprawdź czy plik jest poprawnie otwierany.
P-144568
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?
P-144572
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.
C/C++
std::ofstream plik; // "uchwyt"
plik.open( "post.txt", ios::out );
if( plik.is_open() ) {
    // zapisywanie
}
else
{
    // obsluga wyjatku
}
P-144574
jankowalski25
» 2016-02-07 13:24:51
@carlosmay
C/C++
else
{
    // obsluga wyjatku
}
Wyją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.
P-144576
Wlossy
Temat założony przez niniejszego użytkownika
» 2016-02-07 13:36:06
Dzięki za pomoc, problem rozwiązany. :)
P-144577
« 1 »
  Strona 1 z 1