表格Recta表未正确生成

时间:2016-02-02 18:50:53

标签: c

我正在为vigenere密码构建一个tabula recta表,由于某种原因,它在第一个循环后打印'@'而不是'a'。这是我的代码:

#include <stdio.h>

int
main (void)
{
    char alph[26] = "abcdefghijklmnopqrstuvwxyz";
    char tRecta[26][26] = {0};  //Tabular Recta

    int i,k,j = 0;
    for(i=0;i<26; i++) { //Build tabular recta
        for(k=0; k<26; k++) {
            if((j+k) > 26) {
                tRecta[i][k] = alph[(j+k)-26];
            } else {
                tRecta[i][k] = alph[(j+k)];
            }
        }
        j++;
    }

    for(i=0;i<26;i++) {
        for(k=0;k<26;k++) {
            printf("%c",tRecta[i][k]);
        }
        printf("\n");
    }
    return 0;
}

这就是我得到的:

abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyz@
cdefghijklmnopqrstuvwxyz@b
defghijklmnopqrstuvwxyz@bc
efghijklmnopqrstuvwxyz@bcd
fghijklmnopqrstuvwxyz@bcde
ghijklmnopqrstuvwxyz@bcdef
hijklmnopqrstuvwxyz@bcdefg
ijklmnopqrstuvwxyz@bcdefgh
jklmnopqrstuvwxyz@bcdefghi
klmnopqrstuvwxyz@bcdefghij
lmnopqrstuvwxyz@bcdefghijk
mnopqrstuvwxyz@bcdefghijkl
nopqrstuvwxyz@bcdefghijklm
opqrstuvwxyz@bcdefghijklmn
pqrstuvwxyz@bcdefghijklmno
qrstuvwxyz@bcdefghijklmnop
rstuvwxyz@bcdefghijklmnopq
stuvwxyz@bcdefghijklmnopqr
tuvwxyz@bcdefghijklmnopqrs
uvwxyz@bcdefghijklmnopqrst
vwxyz@bcdefghijklmnopqrstu
wxyz@bcdefghijklmnopqrstuv
xyz@bcdefghijklmnopqrstuvw
yz@bcdefghijklmnopqrstuvwx
z@bcdefghijklmnopqrstuvwxy

我之前没有使用过很多C,printf("%c",tRecta[i][k]);没有完全按照我的想法做到吗?

1 个答案:

答案 0 :(得分:2)

您可以访问您的阵列越界。将if((j+k) >= 26)更改为alph。因为数组25的最后一个有效索引是26而不是%。另一种解决方案是使用#define ARR_SIZE 26 int i,k,j = 0; for( i=0; i<ARR_SIZE; i++ ) { //Build tabular recta for( k=0; k<ARR_SIZE; k++ ) { tRecta[i][k] = alph[ (j+k) % ARR_SIZE ]; } j++; } 操作:

alph[26]

请注意您阅读Main.aggressivePoints。这是未定义的行为。