我需要关于我的代码的帮助,我得到了一些工作,这是其中一项作业。
假设使用编码/解码方案创建了一个加密文件。
根据给定的映射,每个字母都被其他字母替换,如下所示。
char * letters = "abcdefghijklmnopqrstuvwxyz";
char * enc = "kngcadsxbvfhjtiumylzqropwe";
例如,在对一段文本进行编码时,每个a
都变成了一个k
,而每个k
都变成了一个a
解码时。
您将编写程序,对文件进行编码或解码,然后使用上述映射对文件进行编码或解码。
大写字母的映射方式与上述小写字母相同,但仍保持大写。
例如,在对文件进行编码时,每个“A”都会变成“K”,而在解码时,每个“K”都会变成“A”。
数字和其他字符未编码并保持不变。
编写程序读取文件并将文件编码为加密文件。 并编写程序获取加密文件并解码为原始文件。 您的程序应提示用户输入输入文件名和输出文件名。
询问输入文件名/输出文件名(加密文件)。使用上述编码/解码进行加密。
请求加密文件并解码为原始输入文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
char letters[]={"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"};
char enlet[]={"kngcadsxbvfhjtiumylzqropweKNGCADSXBVFHJTIUMYLZQROPWE"};
char infile[20];
char outfile[20];
char ch;
int i;
FILE *org, * enc, *dec;
printf("Enter file name (***.txt) : ");
gets(infile);
printf("Enter saving file name (***.txt) : ");
gets(outfile);
org = fopen(infile,"r");
enc = fopen(outfile,"w+");
while((ch=fgetc(org))!=EOF)
{
for(i=0;i<52;i++)
{
if(letters[i]==ch)
{
ch=enlet[i];
}
}
fputc(ch,enc);
}
fclose(org);
fclose(enc);
return 0;
}
此代码有效,但字母没有正确更改。 如果我的原始文件中有“abcdefghijklmnopqrstuvwxyz”, 然后,它在编码文件中发生“felcadlpbrfhjeiqmwleqropwe”。
我预计它会是“kngcadsxbvfhjtiumylzqropwe” 我不知道我的代码中有什么错误。
最佳答案
您的 if block 应显示为:
if ( letters[i]==ch )
{
ch = enlet[i];
break;
}
这样 ch
就不会被替换两次。即,当您知道该输入文件位置的替换时,中断并继续。
关于c - c语言文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663112/