C语言中的换位密码

C语言中的换位密码,c,encryption,C,Encryption,我已经能够让我的换位密码稍微起作用了。但是,我遇到了一些问题,例如无法在文本文件中输入超过5个字符。当前,当加密文本输出到输出文件时,我的程序也无法转到新行。我也有麻烦循环我的换位密码一遍又一遍 例如,如果trans1.txt在一行中包含文本“jacks”,则应在trans2.txt的第一行中打印“csJakcsJakcsJak”all 此外,换位密码应重置每一行。它应该从位置2、4、0等处重新启动。。。每次都是一条新的路线 #include <stdio.h> int c, j,

我已经能够让我的换位密码稍微起作用了。但是,我遇到了一些问题,例如无法在文本文件中输入超过5个字符。当前,当加密文本输出到输出文件时,我的程序也无法转到新行。我也有麻烦循环我的换位密码一遍又一遍

例如,如果trans1.txt在一行中包含文本“jacks”,则应在trans2.txt的第一行中打印“csJakcsJakcsJak”all

此外,换位密码应重置每一行。它应该从位置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;
}
#包括
int c,j,i,k,p=0;
字符换位[]={2,4,0,1,3},输入[256];
int main(){
FILE*file1=fopen(“trans1.txt”、“r”);
FILE*file2=fopen(“trans2.txt”,“w”);
while(fgets(input,sizeof(input),file1)!=NULL){
对于(i=0;i一些提示:

  • for循环处理5个字符后会发生什么
  • 您的问题似乎是面向字符的。为什么不使用getc()
额外学分:

  • 例如,如果第二行少于5个字符,会发生什么情况
#包括
int main(){
字符换位[]={2,4,0,1,3};
字符输入[256]=“Jacks\n”;
int len=sizeof(换位);
字符通道,温度[len];
int i,j,k;
j=i=0;
做{
对于(;'\0'!=(ch=input[i])&&ch!='\n';++i){
温度[j++]=ch;
如果(j==len){
j=0;
++一,;
打破
}
}
而(j!=0){
temp[j++]='。;//如果(i%len!=0)进行焊盘
如果(j==len)
j=0;
}

对于(k=0;i&&k感谢您的响应,您能给我解释一下这段代码中的第一个for循环吗?为什么“;”前面没有任何东西可以初始化for循环?而且这个程序只适用于一行正确的代码?我需要执行另一个循环才能合并多行文本消息正确吗?@user3473994 first for loop:这在这个循环中收集了五个字符。
i
初始化不能在这里。这里的控制变量包含在另一个for-this循环的循环中。@user3473994如果你知道你的循环,我认为这是处理一行的足够方法,因为它是通过读取一行
input
fgets。另一种方法添加到答案中。
#include <stdio.h>

int main(){
    char transposition[]={2,4,0,1,3};
    char input[256] = "JacksJacksJacks\n";
    int len = sizeof(transposition);
    char ch, temp[len];
    int i, j, k;

    j=i=0;
    do {
        for( ; '\0'!=(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 != '\0');
    printf("\n");

    return 0;
}
i=0;
do {
    for(j=0;j<len;++j){
        ch = input[i];
        if(ch != '\n' && ch != '\0'){
            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 != '\0');
printf("\n");