[C] Problem z wstawieniem instrukcji warunkowej w szyfrowaniu cezara
Ostatnio zmodyfikowano 2013-06-11 13:18
baca1616 Temat założony przez niniejszego użytkownika |
[C] Problem z wstawieniem instrukcji warunkowej w szyfrowaniu cezara » 2013-06-10 21:41:46 witam mam zrobic program na zaliczenie mianowicie szyfrowanie cezara z zapisywaniem wyniku do pliku i pozniej mozliwoscia go otworzenia. Nie moge ruszyć z miejsca algorytm sam w sobie dziala zamienia wg algorytmu i zapisuje ale problem pojawil sie gdy chcialem zrobic zeby na poczatku byla mozliwosc wyboru: 1) zaszyfrowanie i zapis 2) odczyt z pliku i odszyfrowanie wstawilem instrukcje warunkowa i... nic program traci swoje działanie. Pisze program w CodeBlocks tu daje kod : #include <stdio.h> #define MAX 100
int main() { int i, menu; char tab[ MAX ]; printf( "Chcesz zaszyfrowac tekst i zapisac do pliku?, wybierz 1\n" ); printf( "Chcesz odszyfrowac tekst z pliku, wybierz 2\n" ); printf( "chcesz zakonczyc prace programu wybierz 3" ); scanf( "%d", & menu ); if( menu == 1 ) { printf( "Podaj tekst do zaszyfrowania\n" ); gets( tab ); for( i = 0; i < MAX; i++ ) { if(( tab[ i ] >= 'A' ) &&( tab[ i ] <= 'Z' ) ) tab[ i ] =( 65 +( tab[ i ] - 62 ) % 26 ); else if( tab[ i ] >= 'a' && tab[ i ] <= 'z' ) tab[ i ] =( 97 +( tab[ i ] - 94 ) % 26 ); } printf( "zaszyfrowany tekst, ktory zostal zapisany to: %s\n", tab ); char nazwap[] = "cezar.txt"; FILE * fp; fp = fopen( nazwap, "wt" ); if( fp == NULL ) { printf( "Blad przy tworzeniu pliku !\n" ); return 1; } if( fputs( tab, fp ) == EOF ) { printf( "Wystapil blad przy zapisie do pliku %s !\n", nazwap ); fclose( fp ); return 1; } fclose( fp ); } return 0; }
w komentarzu algorytm odszyfowywania ale narazie na to nie trzeba zwracac uwagi tylko na to dlaczego nie można dac if/switch Czekam na jakies wskazówkii |
|
Mitu |
» 2013-06-11 13:18:00 Nie chodzi o dodanie instrukcji warunkowych, a o pojawienie się gets po scanf. Scanf usuwa białe znaki z początku i wczytuje wszystko dopóki nie trafi na kolejny biały znak. Gets wczytuje to co jest w buforze, czyli w tym przypadku "\n" i kończy robotę, bo już nic tam nie zostało. Dlatego musisz wyczyścić bufor, np. wczytując resztki po scanf za pomocą gets, żeby można było wprowadzić tekst. #include <stdio.h> #define MAX 100
int main() { int i, menu; char tab[ MAX ]; printf( "Chcesz zaszyfrowac tekst i zapisac do pliku?, wybierz 1\n" ); printf( "Chcesz odszyfrowac tekst z pliku, wybierz 2\n" ); printf( "chcesz zakonczyc prace programu wybierz 3" ); scanf( "%d", & menu ); gets( tab ); if( menu == 1 ) { printf( "Podaj tekst do zaszyfrowania\n" ); gets( tab ); for( i = 0; i < MAX; i++ ) { if(( tab[ i ] >= 'A' ) &&( tab[ i ] <= 'Z' ) ) tab[ i ] =( 65 +( tab[ i ] - 62 ) % 26 ); else if( tab[ i ] >= 'a' && tab[ i ] <= 'z' ) tab[ i ] =( 97 +( tab[ i ] - 94 ) % 26 ); } printf( "zaszyfrowany tekst, ktory zostal zapisany to: %s\n", tab ); char nazwap[] = "cezar.txt"; FILE * fp; fp = fopen( nazwap, "wt" ); if( fp == NULL ) { printf( "Blad przy tworzeniu pliku !\n" ); return 1; } if( fputs( tab, fp ) == EOF ) { printf( "Wystapil blad przy zapisie do pliku %s !\n", nazwap ); fclose( fp ); return 1; } fclose( fp ); } return 0; }
|
|
« 1 » |