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

petla w petli for

Ostatnio zmodyfikowano 2016-11-02 00:23
Autor Wiadomość
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ć :/

C/C++
#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" ); //czyta z pliku tekst jawny
    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++ ) { //zamiana tekstu jawnego na kody ascii
        printf( "%d\n", znak[ i ] );
    }
   
    printf( "Klucz: " );
    for( t = 0; t < 5; t++ ) { //zmiana tekstu=klucza na kody ascii
        printf( "\n" );
        printf( "%d\n", key[ t ] );
    }
    //szyfrowanie
    for( i = 0; i < 5; i++ ) {
        for( t = 0; t < 5; t++ ) { //tu pojawia sie problem pobiera tylko raz klucz a chce by pobral go 5X
           
            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;
}
P-153200
pekfos
» 2016-11-02 00:23:44
C/C++
znak[ i ] -= 48;
key[ t ] -= 48;
//..
znak[ i ] += 48;
Nie przywracasz poprzedniej wartości klucza.

Nie widzę sensu w twoim kodzie szyfrującym.
P-153238
« 1 »
  Strona 1 z 1