【发布时间】:2016-11-27 11:21:56
【问题描述】:
我试图创建一个程序来用 Ceasar 的密码加密字符串,如果您不熟悉 Ceasar 密码,它是一种非常简单的加密方法,它使用输入字符串和可以选择的数字“n”进行操作由用户,然后将整个字母表移动 n 次。例如,如果 n=1,则所有 A 都变为 B,依此类推。该程序应该有一个输入字符串,程序应该通过键盘输入读取该输入字符串,以及一个必须由用户选择的 n 数字;并且应该返回一个字符串,其中第一个字符表示未加密字符串的第一个字符,然后以下字符应该是输入字符串的加密版本,使用用户选择的 n 数字使用 Ceasar 的密码进行加密。为了简洁起见,我没有在这篇文章中包含程序扫描 n 值并调整它的代码部分(它显然必须小于 26),我也取消了程序的部分将输入字符串转为大写。
int main() {
int i, n;
char uncod[200] = {0};
char cod[200] = {0};
printf("insert the string to encript:");
scanf("%[0-9a-zA-ZSPACE]", uncod);
cod[0] = (char)uncod[0];
for(i == 1; i < 200; i++) {
sprintf(cod, "%d + n", uncod[i]);
if (cod[i] > 90) {
cod[i] = 64 + n;
}
if (cod[i] < 65) {
cod[i] = 91 + n;
}
};
printf("%s\n", cod);
}
这个程序应该把未加密字符串的 ASCII 码加上或减去 n 以通过简单的赋值来找到正确的字符,它只是遍历数组并在分配给第一个字符后将他的密码对应部分分配给每个字符输出字符串的值 输入字符串的未加密的第一个字符。问题是当我去打印输出字符串时,它只会打印第一个字符而忽略其余字符。如何解决?
【问题讨论】:
-
一方面,
for (i == 1...- 高度怀疑你的意思是逻辑等价比较。请尝试 assignment,=。其次,迟早你会发现循环应该运行到 nullchar,而不是 200。 -
哦,对不起……那是一个错字
-
是的,如果发布的代码实际上是产生问题的代码,它会继续让我感到困惑。仍在努力解决这个问题。
-
我在编码而不是在粘贴时打错了
-
不确定这条线应该做什么"sprintf(cod, "%d + n", uncod[i])"。为什么要将这样的字符串连接到您的加密输出?
标签: c arrays string for-loop printing