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

Białe znaki, a wczytanie danych z pliku do zmiennej char.

Ostatnio zmodyfikowano 2014-04-30 22:15
Autor Wiadomość
Zdziwiony
Temat założony przez niniejszego użytkownika
Białe znaki, a wczytanie danych z pliku do zmiennej char.
» 2014-04-30 21:41:36
Witam. Mam taki oto problem: kiedy wczytuje znaki z pliku do zmiennej char w programie np. ciąg znaków "ala ma kota"
to program w konsoli wyświetla mi zawsze coś takiego: "alammakkota": Program po prostu ignoruje spacje i zamiast nich wczytuje znak za spacją, co jest lekko uciążliwe...
Można coś temu zaradzić ? Wiem, że prościej byłoby to zrobić na stringu, ale mi w programie jest potrzebna akurat zmienna char... Jeśli nie wiecie, o co mi chodzi to napiszcie to wkleję tu kod.

Proszę o pomoc i pozdrawiam ;)

P-108998
pekfos
» 2014-04-30 21:42:40
Źle wczytujesz.

Wiem, że prościej byłoby to zrobić na stringu, ale mi w programie jest potrzebna akurat zmienna char...
W czymś to przeszkadza?
P-108999
Zdziwiony
Temat założony przez niniejszego użytkownika
» 2014-04-30 21:50:52
Powiem tak: Z nudów zabrałem się znowu za 'ala szyfrator plików tekstowych' i wpadłem na taki mały pomysł, że tekst który pobiorę jako string zapiszę w pliku tekstowym, a później będę pobierał z niego po jednym znaku i zmieniał jego znaczenie na coś innego. No i prawie mi się udało, ale te spacje przeszkadzają jeśli się je wpisze.

Kod:
C/C++
#include <iostream>
#include <windows.h>
#include <cstdio>
#include <conio.h>
#include <fstream>
using namespace std;
void szyfruj();
void deszyfruj();

int main()
{
   
    cout << "Witaj w Programie szyfrujacym wiadomosci \nCo chcesz zrobic? Wpisz jedna z komend:\nSzyfruj - encrypt\nOdszyfruj - decrypt";
    SetConsoleTitleA( "Szyfruj" );
    do {
        string menu;
        cout << endl;
        getline( cin, menu ); //wpisz
        if( menu == "encrypt" )
        {
            system( "cls" );
            szyfruj();
        }
        else if( menu == "decrypt" )
        {
            cout << "Nie oprogramowano!";
        }
        else
        {
            cout << "Zla komenda!";
        }
       
    } while( true );
   
}

void szyfruj()
{
    //odczyt znak po znaku
    string tekst;
   
    cout << "Podaj tekst do szyfracji (nie uzywaj polskich znakow!):";
    getline( cin, tekst ); //wpisz
    //tworzenie pliku
    ofstream plik( "temp.tmp" );
    plik.close(); //zamknij
    Sleep( 500 );
    plik.open( "temp.tmp", std::ios::in | std::ios::out ); //otworz
    if( plik.good() == true )
    {
        plik << tekst;
        plik.close(); //zapsiano
    } else cout << "blad";
   
    ifstream plikodczyt( "temp.tmp", std::ios::in | std::ios::out ); //otworz
    if( plikodczyt.good() == true )
    {
        plikodczyt.seekg( 0, ios::end ); //wskaznik na koncu pliku
        streampos koniecpliku = plikodczyt.tellg(); //odczyt pozycji
        long long koniec;
        koniec = koniecpliku;
        //cout << "pozycja: " << koniec << endl;
       
        long long pozycja;
        pozycja = 0;
        do {
            char znak;
           
            if( znak == 'a' )
            {
                cout << "1, ";
            }
            if( znak == 'b' )
            {
                cout << "2, ";
            }
            if( znak == 'c' )
            {
                cout << "3, ";
            }
            if( znak == 'd' )
            {
                cout << "4, ";
            }
            if( znak == 'e' )
            {
                cout << "5, ";
            }
            if( znak == 'f' )
            {
                cout << "6, ";
            }
            if( znak == 'g' )
            {
                cout << "7, ";
            }
            if( znak == 'h' )
            {
                cout << "8, ";
            }
            if( znak == 'i' )
            {
                cout << "9, ";
            }
            if( znak == 'j' )
            {
                cout << "10, ";
            }
            if( znak == 'k' )
            {
                cout << "11, ";
            }
            if( znak == 'l' )
            {
                cout << "12, ";
            }
            if( znak == 'm' )
            {
                cout << "13, ";
            }
            if( znak == 'n' )
            {
                cout << "14, ";
            }
            if( znak == 'o' )
            {
                cout << "15, ";
            }
            if( znak == 'p' )
            {
                cout << "16, ";
            }
            if( znak == 'r' )
            {
                cout << "17, ";
            }
            if( znak == 's' )
            {
                cout << "18, ";
            }
            if( znak == 't' )
            {
                cout << "19, ";
            }
            if( znak == 'u' )
            {
                cout << "20, ";
            }
            if( znak == 'w' )
            {
                cout << "21, ";
            }
            if( znak == 'x' )
            {
                cout << "22, ";
            }
            if( znak == 'y' )
            {
                cout << "23, ";
            }
            if( znak == 'z' )
            {
                cout << "24, ";
            }
           
           
            plikodczyt.seekg( pozycja, ios::beg );
            plikodczyt >> znak;
           
            cout << "pozycja w petli: " << pozycja << endl;
            ++pozycja;
        } while( pozycja <= koniec );
       
        plikodczyt.close(); //zamknac
    } else cout << "blad";
   
}
P-109000
pekfos
» 2014-04-30 22:13:24
C/C++
plikodczyt >> std::noskipws >> znak;

P-109002
Zdziwiony
Temat założony przez niniejszego użytkownika
» 2014-04-30 22:15:11
Dzięki teraz działa :)
P-109003
« 1 »
  Strona 1 z 1