我已经能够让我的换位密码工作一点。但是,我遇到了诸如无法在文本文件中吸收超过 5 个字符等问题。目前,当加密文本输出到输出文件中时,我的程序也无法转到新行。我也在一遍又一遍地循环我的换位密码时遇到问题。
例如,如果 trans1.txt 在一行中包含文本"JacksJacksJacks",则应在 trans2 的第一行打印"csJakcsJakcsJak.txt
此外,换位密码应重置每行。它应该从位置 2 然后 4 然后 0 等重新启动......每次都是新行。
#include <stdio.h>
int c, j, i, k,p=0;
char transposition[]={2,4,0,1,3}, input[256];
int main(){
FILE *file1=fopen("trans1.txt", "r");
FILE *file2=fopen("trans2.txt", "w");
while(fgets(input,sizeof(input),file1)!=NULL){
for(i=0;i<5;i++){
k=transposition[i];
fprintf(file2,"%c",input[k]);
}
}
return 0;
}
#include <stdio.h>
int main(){
char transposition[]={2,4,0,1,3};
char input[256] = "JacksJacksJacksn";
int len = sizeof(transposition);
char ch, temp[len];
int i, j, k;
j=i=0;
do {
for( ; ' '!=(ch = input[i]) && ch != 'n';++i){
temp[j++] = ch;
if(j == len){
j=0;
++i;
break;
}
}
while(j!=0){
temp[j++] = '.';//pading if(i % len != 0)
if(j == len)
j = 0;
}
for(k=0;i && k<len;++k){
printf("%c", temp[transposition[k]]);
}
}while(ch != 'n' && ch != ' ');
printf("n");
return 0;
}
同一件事的另一种方式
i=0;
do {
for(j=0;j<len;++j){
ch = input[i];
if(ch != 'n' && ch != ' '){
temp[j] = ch;
++i;
} else {
temp[j] = '.';
}
}
if(temp[0] != '.')
for(k=0;k<len;++k){
printf("%c", temp[transposition[k]]);
}
}while(ch != 'n' && ch != ' ');
printf("n");
一些提示:
- for 循环处理 5 个字符后会发生什么?
- 你的问题似乎是以性格为导向的。为什么不使用 getc((?
额外积分:
- 例如,如果第 2 行的字符少于 5 个,会发生什么情况?