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

rozdz. 20 przykład 20.1

Ostatnio zmodyfikowano 2010-04-14 15:56
Autor Wiadomość
marek
Temat założony przez niniejszego użytkownika
rozdz. 20 przykład 20.1
» 2010-04-13 21:33:04
Do folderu wrzuciłem mojplik.txt, skompilowałem i uruchomiłem program. Pojawił się komunikat
20.1.exe has encountered a problem and needs to close.  We are sorry for the inconvenience.
 ????????????
P-16126
GoldWolf
» 2010-04-14 15:56:03
Było kilka błędów do usunięcia.
1 - gdy nie było pliku aplikacja nie potrzebnie ten plik tworzyła.
2 - zmienne wynik i x nie były potrzebne.

Tu masz to poprawione, ja jednak będę musiał się jeszcze temu bliżej przyjrzeć bo jest jeszcze jeden mały błąd no i lekcję trzeba poprawić.
C/C++
//Funkcje z parametrami referencyjnymi-------
#include <conio.h>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream> //nowa biblioteka
int OdczytPliku( const std::string & nazwapliku, std::string & bufor );
void Algorytm( std::string & bufor, short a, int b );
void ZapisPliku( const std::string & nazwapliku, const std::string & bufor );
std::string PL( std::string & znak );

int main()
{
    using std::string;
    using std::cout;
    const string NAZWAPLIKU = "mojplik.txt";
    string danepliku;
   
    if( OdczytPliku( NAZWAPLIKU, danepliku ) == 0 ) {
        Algorytm( danepliku, 0, 0 );
        ZapisPliku( NAZWAPLIKU, danepliku );
        cout << PL( danepliku );
    }
    getch();
    return 0;
}
//odczytuje dana z pliku
int OdczytPliku( const std::string & nazwapliku, std::string & bufor ) {
    using std::fstream;
    fstream plik;
    std::string bufor1;
   
    plik.open( nazwapliku.c_str(), std::ios::in );
    if( plik.is_open() ) {
        while( !plik.eof() ) {
            getline( plik, bufor1 );
            bufor1 += "\n";
            bufor += bufor1;
        }
        plik.close();
        return 0;
    } else {
        std::cout << "Brak mojego pliku !";
        return 1;
    }
}
//funkcja pobiera dane z wcześniej wczytanego pliku i modyfikuje je wg prostego wzoru
void Algorytm( std::string & bufor, short a, int b ) {
    short pozycja, pozycja1;
    std::string bufor1;
    std::stringstream IntToStr;
   
    if( bufor.find( 'ż' ) ) {
        //zapisuje pozycje literki ż
        pozycja = bufor.find( 'ż' );
        // przesuwamy pozycje o 2
        pozycja += 2;
        //wycinamy z całego buforu 10 pozycji od pozycji
        bufor1.assign( bufor, pozycja, 10 );
        if( bufor1.find( ' ' ) ) {
            //zapisuje pozycje spacji
            pozycja1 = bufor1.find( ' ' );
            //następnie zostawiamy tylko liczbę
            bufor1.assign( bufor1, 0, pozycja1 );
            //zamieniamy stringa na inta
            sscanf( bufor1.c_str(), "%d", & zmienna );
            //wykonujemy działanie
            Wynik = 2 * ++zmienna + 15;
            //zamieniamy inta na stringa
            IntToStr << zmienna;
            IntToStr >> bufor1;
            IntToStr.clear(); // zerowanie IntToStr
            //zastępujemy liczbą jaka była w buforze liczbą o 1 większą
            bufor.replace( pozycja, pozycja1, bufor1 );
            //ten if ma słyżyć też zastąpienu tylko drugiego wystąpienia liczby czyli w wyrażeniu 2 * liczba + 15
            if( bufor.find( "funkcja" ) ) {
                pozycja = bufor.find( '2', bufor.find( "funkcja" ) );
                bufor.replace( pozycja + 4, pozycja1, bufor1 );
            }
            //pozostaje jeszcze zmienić wynik na wyżej obliczony
            if( bufor.find( "k to " ) ) {
                pozycja = bufor.find( ' ', bufor.find( "k to " ) );
                //ponownie IntToString
                IntToStr << Wynik;
                IntToStr >> bufor1;
                bufor.replace(( pozycja + 4 ), bufor1.length(), bufor1 );
            }
        }
    } else
         std::cout << "Brak szukanej litery!";
   
}
//zapisuje dane do pliku mojplik
void ZapisPliku( const std::string & nazwapliku, const std::string & bufor ) {
    using std::fstream;
    fstream plik;
   
    plik.open( nazwapliku.c_str(), std::ios::out );
    if( plik.is_open() ) {
        plik << bufor;
    } else
         std::cout << "Brak mojego pliku !";
   
}
//poprawnie wyswietla polskie znaki w konsoli
std::string PL( std::string & znak ) {
   
    for( unsigned i = 0; i < znak.length(); i++ ) {
        switch( znak[ i ] ) {
        case 'ą':
            znak[ i ] = static_cast < char >( 165 );
            break;
           
        case 'ć':
            znak[ i ] = static_cast < char >( 134 );
            break;
           
        case 'ę':
            znak[ i ] = static_cast < char >( 169 );
            break;
           
        case 'ł':
            znak[ i ] = static_cast < char >( 136 );
            break;
           
        case 'ń':
            znak[ i ] = static_cast < char >( 228 );
            break;
           
        case 'ó':
            znak[ i ] = static_cast < char >( 162 );
            break;
           
        case 'ś':
            znak[ i ] = static_cast < char >( 152 );
            break;
           
        case 'ź':
            znak[ i ] = static_cast < char >( 171 );
            break;
           
        case 'ż':
            znak[ i ] = static_cast < char >( 190 );
            break;
           
        case 'Ą':
            znak[ i ] = static_cast < char >( 164 );
            break;
           
        case 'Ć':
            znak[ i ] = static_cast < char >( 143 );
            break;
           
        case 'Ę':
            znak[ i ] = static_cast < char >( 168 );
            break;
           
        case 'Ł':
            znak[ i ] = static_cast < char >( 157 );
            break;
           
        case 'Ń':
            znak[ i ] = static_cast < char >( 227 );
            break;
           
        case 'Ó':
            znak[ i ] = static_cast < char >( 224 );
            break;
           
        case 'Ś':
            znak[ i ] = static_cast < char >( 151 );
            break;
           
        case 'Ź':
            znak[ i ] = static_cast < char >( 141 );
            break;
           
        case 'Ż':
            znak[ i ] = static_cast < char >( 189 );
            break;
        }
    }
    return znak;
}
P-16142
« 1 »
  Strona 1 z 1