【发布时间】:2020-06-18 06:44:46
【问题描述】:
首先我得到了执行以下操作的代码:
键:ab 明文:测试我 密文:Tfsu ne
我当然想让我的密钥跳过空格 (Tfsu mf),所以我尝试为我的密钥添加一个额外的计数器 (m-counter),以确保它不会在每次迭代后递增纯文本。然而,结果是,现在我得到了:
键:ab 明文:测试我 密文:Uftu nf
所以现在它就像我的钥匙是 bb。
有人能解释一下为什么第二个循环会导致输出发生这种变化,而不是仅在字符被加密(即字母)时递增吗?
for (int m = 0; m<l; m++)
{
for(int e = 0; e<z; e++)
{
if (islower(plaintext[e]))
{
ciphertext [e] = (plaintext [e] + shift `(argv[1][m%l]) - 'a') %26 + 'a';`
}
if (isupper(plaintext[e]))
{
ciphertext [e] = (plaintext [e] + shift (argv[1][m%l]) - 'A') %26 + 'A';
}
}
}
for (int q = 0; q<z;q++)
{
if (!isalpha(plaintext[q]) )
{
ciphertext [q] = (plaintext [q]);
}
}
printf ("ciphertext: ");
for (int i = 0; i<z; i++)
{
printf ("%c", ciphertext [i]);
}
printf("\n");
【问题讨论】:
-
请将显示的代码转换为minimal reproducible example。为此,我希望减少与获取数据(参数、输入)等相关的代码。请在显式初始化数组的数组中处理现成的数据。理想情况下,您可以将代码从所有 cs50 依赖项中释放出来,这将使其更容易复制。也请去掉宽大的空行并修复缩进。
-
好的,谢谢您的建议;我清理了它,只显示有关我的问题的代码。我希望我现在没有删除太多?
-
抱歉,您确实删除了太多内容。请再次阅读我提供的链接。另外请在修复缩进方面做更多的工作。很抱歉,但我很想再次写完全相同的评论。
-
好的,这对我来说是新的,所以我不确定你修复缩进的意思。能不能说的具体点,让我知道下次怎么做的更好?
-
好的,我会详细说明。请将显示的代码转换为minimal reproducible example。为此,请阅读该链接。您描述在运行代码时获得了实际结果。这意味着您可以运行它。显示的代码不可能做到这一点,因为它甚至无法编译。因此,首先,发布更多代码,足以使实际编译您显示的代码成为可能。然后确保您展示的代码在构建后可以执行。因此它必须是一个完整的程序。显示的代码当然不是一个完整的程序,因为它没有显示
main()。