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

problem z wczytaniem pliku tekstowego po uprzednim pomyleniu nazwy

Ostatnio zmodyfikowano 2015-01-14 00:10
Autor Wiadomość
bensik
Temat założony przez niniejszego użytkownika
problem z wczytaniem pliku tekstowego po uprzednim pomyleniu nazwy
» 2015-01-12 20:43:57
Mam takie coś:


C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>

using namespace std;

void zwykle_znaki( string & S )
{
    for( int i = 0; i < S.size(); i++ )
    {
        switch( S[ i ] )
        {
        case ' ': S[ i ] = 'X'; break;
        case 'a': S[ i ] = 'A'; break;
        case 'A': S[ i ] = 'A'; break;
        case 'Ą': S[ i ] = 'A'; break;
        case 'ą': S[ i ] = 'A'; break;
        case 'b': S[ i ] = 'B'; break;
        case 'B': S[ i ] = 'B'; break;
        case 'c': S[ i ] = 'C'; break;
        case 'C': S[ i ] = 'C'; break;
        case 'Ć': S[ i ] = 'C'; break;
        case 'ć': S[ i ] = 'C'; break;
        case 'd': S[ i ] = 'D'; break;
        case 'D': S[ i ] = 'D'; break;
        case 'e': S[ i ] = 'E'; break;
        case 'E': S[ i ] = 'E'; break;
        case 'Ę': S[ i ] = 'E'; break;
        case 'ę': S[ i ] = 'E'; break;
        case 'f': S[ i ] = 'F'; break;
        case 'F': S[ i ] = 'F'; break;
        case 'g': S[ i ] = 'G'; break;
        case 'G': S[ i ] = 'G'; break;
        case 'h': S[ i ] = 'H'; break;
        case 'H': S[ i ] = 'H'; break;
        case 'i': S[ i ] = 'I'; break;
        case 'I': S[ i ] = 'I'; break;
        case 'j': S[ i ] = 'J'; break;
        case 'J': S[ i ] = 'J'; break;
        case 'k': S[ i ] = 'K'; break;
        case 'K': S[ i ] = 'K'; break;
        case 'l': S[ i ] = 'L'; break;
        case 'L': S[ i ] = 'L'; break;
        case 'Ł': S[ i ] = 'L'; break;
        case 'ł': S[ i ] = 'L'; break;
        case 'm': S[ i ] = 'M'; break;
        case 'M': S[ i ] = 'M'; break;
        case 'n': S[ i ] = 'N'; break;
        case 'N': S[ i ] = 'N'; break;
        case 'Ń': S[ i ] = 'N'; break;
        case 'ń': S[ i ] = 'N'; break;
        case 'o': S[ i ] = 'O'; break;
        case 'O': S[ i ] = 'O'; break;
        case 'Ó': S[ i ] = 'O'; break;
        case 'ó': S[ i ] = 'O'; break;
        case 'p': S[ i ] = 'P'; break;
        case 'P': S[ i ] = 'P'; break;
        case 'r': S[ i ] = 'R'; break;
        case 'R': S[ i ] = 'R'; break;
        case 's': S[ i ] = 'S'; break;
        case 'S': S[ i ] = 'S'; break;
        case 'Ś': S[ i ] = 'S'; break;
        case 'ś': S[ i ] = 'S'; break;
        case 't': S[ i ] = 'T'; break;
        case 'T': S[ i ] = 'T'; break;
        case 'u': S[ i ] = 'U'; break;
        case 'U': S[ i ] = 'U'; break;
        case 'w': S[ i ] = 'W'; break;
        case 'W': S[ i ] = 'W'; break;
        case 'y': S[ i ] = 'Y'; break;
        case 'Y': S[ i ] = 'Y'; break;
        case 'z': S[ i ] = 'Z'; break;
        case 'Z': S[ i ] = 'Z'; break;
        case 'Ż': S[ i ] = 'Z'; break;
        case 'ż': S[ i ] = 'Z'; break;
        case 'Ź': S[ i ] = 'Z'; break;
        case 'ź': S[ i ] = 'Z'; break;
        case 'v': S[ i ] = 'V'; break;
        case 'V': S[ i ] = 'V'; break;
        case 'q': S[ i ] = 'Q'; break;
        case 'Q': S[ i ] = 'Q'; break;
        default:
            S[ i ] = 'X';
            break;
        }
    }
}


int main()
{
    fstream haczyk;
    string tekst, nazwa;
   
   
   
    cout << "Podaj sciezke do pliku ktory chcesz otworzyc, lub w przypadku, gdy znajduje sie on w tym samym folderze co program podaj jego nazwe. \nNie zapomnij o rozszerzeniu .txt: \n" << endl;
   
   
    jeszczeRaz2:
    cin >> nazwa;
   
    haczyk.open( nazwa.c_str(), ios::in );
   
    if( haczyk.good() == true )
    { std::cout << "Posiadasz dostep do pliku!\n" << std::endl;
        ofstream nowyTekst( "nowyTekst.txt" );
        while( haczyk.good() )
        {
            getline( haczyk, tekst );
            zwykle_znaki( tekst );
            nowyTekst << tekst << endl;
            cout << tekst << endl; } haczyk.close(); }
   
   
   
   
    else { cout << "Dostep do pliku nie jest mozliwy. \nSprawdz czy podana nazwa / sciezka jest poprawna. \nJesli wpisywales sama nazwe to upewnij sie ze dany plik znajduje sie w tym samym folderze co program !\n\n" << std::endl;
        goto jeszczeRaz2; }





Program ma za zadanie wczytać jakiś plik o podanej przez użytkownika nazwie, podmienić znaki i zapisać to do pliku "nowyTekst". W przypadku podania złej nazwy pliku do odczytu, program powinien wyświetlić komunikat "Dostep do pliku nie jest...." i ponowić możliwość wpisania nazwy pliku.

Program ładnie podmienia znaki i zapisuje cały tekst w nowym pliku. Problem pojawia się jednak kiedy użytkownik pomyli się i wpisze złą nazwę pliku tekstowego, który ma zostać odczytany. Owszem pojawia się wtedy komunikat: "Dostep do pliku nie jest....", jednakże potem nie da się już wczytać żadnego pliku. Nawet takiego o poprawnej nazwie, który bez problemu wczytywany jest za pierwszym podejściem.

Próbowałem czyścić strumień wejścia wpisując przed nim cin.clear(); i cin.sync(); ale nic to nie dało.

Ktoś wie co tu jest nie halo ?



ps
dodam że to dopiero moje początki z programowaniem więc proszę się nie śmiać z tego co jest tam napisane :)
P-124760
Monika90
» 2015-01-12 22:10:09
Można dopisać haczyk.clear(); przed goto jeszczeRaz2;, a moze lepiej zrezygnować z goto i napisać to porządnie.
P-124774
bensik
Temat założony przez niniejszego użytkownika
» 2015-01-14 00:10:26
Głowę dał bym sobie odciąć że próbowałem tak zrobić ;p W każdym razie dziękuje Moniko ponieważ pomogło.

Pisząc "napisać to porządnie" masz na myśli pętle tak ?
P-124867
« 1 »
  Strona 1 z 1