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 ;)
|
|
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? |
|
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: #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 ); if( menu == "encrypt" ) { system( "cls" ); szyfruj(); } else if( menu == "decrypt" ) { cout << "Nie oprogramowano!"; } else { cout << "Zla komenda!"; } } while( true ); }
void szyfruj() { string tekst; cout << "Podaj tekst do szyfracji (nie uzywaj polskich znakow!):"; getline( cin, tekst ); ofstream plik( "temp.tmp" ); plik.close(); Sleep( 500 ); plik.open( "temp.tmp", std::ios::in | std::ios::out ); if( plik.good() == true ) { plik << tekst; plik.close(); } else cout << "blad"; ifstream plikodczyt( "temp.tmp", std::ios::in | std::ios::out ); if( plikodczyt.good() == true ) { plikodczyt.seekg( 0, ios::end ); streampos koniecpliku = plikodczyt.tellg(); long long koniec; koniec = koniecpliku; 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(); } else cout << "blad"; } |
|
pekfos |
» 2014-04-30 22:13:24 plikodczyt >> std::noskipws >> znak;
|
|
Zdziwiony Temat założony przez niniejszego użytkownika |
» 2014-04-30 22:15:11 Dzięki teraz działa :) |
|
« 1 » |