我已经用C编写了Transposition Cipher并且混淆了这段代码的输出。
#include<stdio.h>
#include<string.h>
#include<math.h>
main()
{
char plain[]="Ibrahimovic called them babies in Champions League";
int row,col,key,i=0;
printf("key length: ");
scanf("%d%*c",&key);
int enc[(int) (ceil(strlen(plain)/key))][key];
for(row=0; row<(int) (ceil( (double) strlen(plain)/key)); ++row)
{
for(col=0; col<key; ++col)
{
if(i==strlen(plain))
enc[row][col]='^';
else if(i>strlen(plain))
enc[row][col]='%';
else
enc[row][col]=plain[i];
printf(" %c |",enc[row][col]);
++i;
}
putchar('\n');
}
putchar('"');
for(col=0; col<key ; ++col)
for(row=0; row<(int) (ceil((double) strlen(plain)/key)) ; ++row)
printf("%c",enc[row][col]);
puts("\"\n");
}
当key = 8时输出。
I | b | r | a | h | i | m | o |
v | i | c | | c | a | l | l |
e | d | | t | h | e | m | |
b | a | b | i | e | s | | i |
n | | C | h | a | m | p | i |
o | n | s | | L | e | a | g |
u | e | ^ | % | % | % | % | % |
"Ivebnoubida nerc bCs^a tih %hcheaL%iaesme%mlm pa�ol iig%"
因此,循环中printf函数的输出表明enc
数组中的所有元素都是正确的。但是当我在循环外打印它时,其中一个元素是错误的。
如果我将printf函数的格式更改为外部循环以打印整数值,则表示错误的元素的值为-1。
"73 118 101 98 110 111 117 98 105 100 97 32 110 101 114 99 32 98 67 115 94 97 32 116 105 104 32 37 104 99 104 101 97 76 37 105 97 101 115 109 101 37 109 108 109 32 112 97 **-1** 111 108 32 105 105 103 37 "
那我的代码有什么问题? 谢谢
答案 0 :(得分:2)
int enc[(int) (ceil(strlen(plain)/key))][key];
这一行有一个整数除法,我假设你想要一个浮点数而错过了演员。