-3

我正在尝试使用 Caesar Cipher 从文件中进行解密。该文件是一个 .txt,程序应该读取该文件,解密它(4 个字母的字母移位),然后打印解密的消息。我在开始时遇到了麻烦,到目前为止我所拥有的是:

#include <stdio.h>
#include <stdlib.h>

int main()
{

double val;
FILE *fp;
fp = fopen("encrypted.txt", "r"); /* Opens encrypted.txt for reading */
fscanf(fp, "%lf", &val);

}

任何建议表示赞赏..我也更喜欢不使用循环。谢谢!

4

1 回答 1

1

由于您对每个字符执行“解密”,因此您可以在循环中使用 getc(fp) (我看不到在这种情况下您打算如何避免循环......),并根据需要修改结果。

我不确定你所说的 4 个字母移位是什么意思,但我想你的意思是 -

c += 4;
if (c > 'z' && c <= 'z' + 4)
    c = c -'z' + 'a';
else if (c > 'Z' && c <= 'Z' + 4)
    c = c -'Z' + 'A';

或者

c = (c >= 'a' && c <= 'z') ? ((c + 4 - 'a') % ('z'-'a')) + 'a' : ((c + 4 - 'A') % ('Z'-'A')) + 'A'

这些可以进一步简化(例如 - 因为'z' - 'a' == 'Z' -'A'),你甚至可以将它们转换为常量,尽管编译器可能会为你做这些。为了更好的可读性,我把它留在那里

于 2013-09-22T19:03:17.620 回答