sensey9 Temat założony przez niniejszego użytkownika |
Szyfrowanie znaków » 2012-02-19 18:45:47 Witam. Robię program do szkoły który ma za zadanie zaszyfrować podany przez użytkownika ciąg znaków przesuwając w wybraną stronę i ustaloną ilość miejsc. Program jako taki już jest ale mam pewne problemy: 1. Nie wiem jak zrobić aby program zapętlał się do czasu gdy użytkownik poda np. Q próbowałem pętlą do .. while ale po wciśnięciu Q program dalej się wykonywał. 2. Po zastosowaniu funkcji cin.ignore(1,'\n') program ucina mi pierwszy znak podanego ciągu znaków czy da się temu jakoś zaradzić. Oto mój kod #include <iostream>
using namespace std; void szyfruj_w_prawo( char tekst[], int przes, char kierunek ); void deszyfruj_w_prawo( char tekst[], int przes, char kierunek ); int main() { char tekst[ 1000 ]; char kierunek; int przes; do { cout << "Podaj ciag znakow do zaszyfrowania" << endl; cin.ignore( 1, '\n' ).getline( tekst, 1000 ); cout << "Podaj kierunek szyfrowania" << endl; cout << "L - Lewo / P - Prawo" << endl; cin >> kierunek; cout << "Podaj przesuniecie" << endl; cin >> przes; szyfruj_w_prawo( tekst, przes, kierunek ); cout << "Zaszyfrowany ciag znakow to: " << tekst << endl; deszyfruj_w_prawo( tekst, przes, kierunek ); cout << "Odszyfrowany ciag znakow to: " << tekst << endl; } while( tekst[ 1000 ] != 'q' ); return 0; } void szyfruj_w_prawo( char tekst[], int przes, char kierunek ) { if( kierunek == 'P' || kierunek == 'p' ) { for( int i = 0; tekst[ i ] != '\0'; i++ ) { tekst[ i ] =( tekst[ i ] + przes ); } } if( kierunek == 'L' || kierunek == 'l' ) { for( int i = 0; tekst[ i ] != '\0'; i++ ) { tekst[ i ] =( tekst[ i ] - przes ); } } } void deszyfruj_w_prawo( char tekst[], int przes, char kierunek ) { if( kierunek == 'P' || kierunek == 'p' ) { for( int i = 0; tekst[ i ] != '\0'; i++ ) { tekst[ i ] =( tekst[ i ] - przes ); } } if( kierunek == 'L' || kierunek == 'l' ) { for( int i = 0; tekst[ i ] != '\0'; i++ ) { tekst[ i ] =( tekst[ i ] + przes ); } } }
|
|
RazzorFlame |
» 2012-02-19 18:55:50 Ja bym to spróbował napisać w allegro albo sdl. |
|
akwes |
» 2012-02-19 18:58:22 Ja bym to spróbował napisać w allegro albo sdl. |
@RazzorFlame, kurde, gość ma problem z algorytmem a Ty mu mówisz o bibliotekach 2D ?! @autor tematu while( tekst[ 1000 ] != 'q' );
Jak to rozumiesz ;> ? Tablica deklarowana tak Nie ma elementu tekst[10], tylko elementy tekst[0],tekst[1] aż do tekst[9]. Ty porównujesz czy w tablicy tekst[1000] znak na miejscu 1000 jest równy 'q' :P Na pewno o to Ci chodziło? |
|
sensey9 Temat założony przez niniejszego użytkownika |
» 2012-02-19 19:05:37 nawet jeśli zmienię na tekst[0] to nic to nie zmieni program i tak się wykuję |
|
pekfos |
» 2012-02-19 19:11:14 Przypisujesz znak do elementu n, sprawdzasz element 0, przypisujesz znak do elementu n+1, sprawdzasz element 0, przypisujesz znak do elementu n+2, sprawdzasz element 0. Dalej nie widzisz błędu? while( true ) { if( current == 'q' ) break; tab[ it++ ] = current; } |
|
sensey9 Temat założony przez niniejszego użytkownika |
» 2012-02-19 19:24:32 Nie za bardzo to rozkminiam. |
|
akwes |
» 2012-02-19 19:27:50 a rozumiesz linijkę cin.ignore( 1, '\n' ).getline( tekst, 1000 );
? |
|
sensey9 Temat założony przez niniejszego użytkownika |
» 2012-02-19 19:35:32 tak pobieranie znaków z cin do getline usuwając znak końca linii ze strumienia |
|
« 1 » 2 3 |