c - c语言文件

标签 c file fgetc

我需要关于我的代码的帮助,我得到了一些工作,这是其中一项作业。


假设使用编码/解码方案创建了一个加密文件。

根据给定的映射,每个字母都被其他字母替换,如下所示。

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/

相关文章:

c - 从文件中读取字符

php - fopen 有一些奇怪的行为

C 骰子游戏

c - C中的堆栈变量混淆

ios - 更新 iOS 应用程序会删除库目录文件吗?

python - 将 f.write 文件保存到与找到的 Askopenfilename 相同的目录中

c - 一次将一个字符的输入复制到输出的程序

c - ANSI C : Pointers to strings literals

c - 当我为 & records[*Count].source 输入值时,.exe 崩溃

c - Xcode : EXC_BAD_ACCESS when using fgetc() in C