C程序中的密码不会更改文本文件

时间:2017-09-13 16:22:10

标签: c encryption

在这个程序中,我在与程序相同的文件夹中使用名为“message”的文本文件上的简单替换密码。但是,当我运行它时,消息不会从“abcdefg”更改。我已经多次查看过代码,但是我没有看到问题,也许我只是C中的业余爱好者。非常感谢任何帮助。谢谢!

Ubuntu / Linux

2 个答案:

答案 0 :(得分:0)

您的输入缓冲区永远不会被初始化。文件打开后添加:

fgets(file, MAXSIZE, File);
/* todo: check for error */

如果要覆盖该消息,请使用rewind(File)。 完成后写一个换行符。

答案 1 :(得分:0)

在函数Encrypt()中,打开文件后,您实际上没有将文件中的数据读入字符串file

您可以使用fgets()从打开的文件中读取字符串file,如

fgets(file, sizeof(file), File);

应该注意fgets()会在尾随\n中读取字符串。

在读取该行之后,文件指针将会前进,您需要在写入之前将其恢复到原始位置。

您可以将当前位置保存在变量中,从文件中读取并使用保存的值fseek()将文件指针设置回来。

long currentPos=ftell(File);
fgets(file, MAXSIZE, File);
fseek(File, currentPos, 0);

此外,代替多个if s,最好在else if之后if s。 这样,不需要检查匹配的if之后的if

或者您可以取消所有烦人的if并执行类似

的操作
char original[]="abcdefghijklmnoqrstuvwxyz";
char translation[]="FGZVABGXEJIKOVUYNPRCQTDSH";
for(j=0; translation[j]!='\0'; ++j)
{
    if(file[i]==original[j])
    {
        file[i]=translation[j];
        fputc(file[i], File);
    }
}

使用system("pause")并不是一种好习惯。请参阅here