petla w petli for
Ostatnio zmodyfikowano 2016-11-02 00:23
dp19881 Temat założony przez niniejszego użytkownika |
petla w petli for » 2016-11-01 20:03:17 przeksztalcam kod dla szyfru Vigenere'a ale jest problem z pobraniem kolejnej litery (klucza) w petli for przy szyfrowaniu.. Znaki sa dobrze pobierane a litera(klucz) tylko pierwsza jest ok.. nie potrafie sobie z tym poradzić :/ #include <stdio.h> #include <string.h> int main() { int i; char z, t, k; char znak[ 5 ]; char key[ 5 ]; FILE * f = fopen( "key.txt", "r" ); k = getc( f ); for( t = 0;( t < 5 ) &&( feof( f ) == 0 ) &&( k != '\n' ); t++ ) { key[ t ] = k; k = getc( f ); } fclose( f ); FILE * r = fopen( "plain.txt", "r" ); z = getc( r ); for( i = 0;( i < 5 ) &&( feof( r ) == 0 ) &&( z != '\n' ); i++ ) { znak[ i ] = z; z = getc( r ); } fclose( r ); for( i = 0; i < 5; i++ ) { printf( "%d\n", znak[ i ] ); } printf( "Klucz: " ); for( t = 0; t < 5; t++ ) { printf( "\n" ); printf( "%d\n", key[ t ] ); } for( i = 0; i < 5; i++ ) { for( t = 0; t < 5; t++ ) { if(( znak[ i ] >= 97 ) &&( znak[ i ] <= 122 ) ) { znak[ i ] -= 97; key[ t ] -= 97; znak[ i ] += key[ t ]; znak[ i ] = znak[ i ] % 26; znak[ i ] += 97; } else if(( znak[ i ] >= 48 ) &&( znak[ i ] <= 57 ) ) { znak[ i ] -= 48; key[ t ] -= 48; znak[ i ] += key[ t ]; znak[ i ] =( znak[ i ] % 10 ); znak[ i ] += 48; } } } FILE * out; out = fopen( "crypto.txt", "w+t" ); for( i = 0; i < 5; i++ ) { z = znak[ i ]; printf( " \n " ); printf( "znaki: %c\n", z ); fprintf( out, "%c", z ); } fclose( out ); return 0; } |
|
pekfos |
» 2016-11-02 00:23:44 znak[ i ] -= 48; key[ t ] -= 48;
znak[ i ] += 48; |
Nie przywracasz poprzedniej wartości klucza. Nie widzę sensu w twoim kodzie szyfrującym. |
|
« 1 » |