- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
密码适用于 islower 部分,但不适用于 isupper 部分。例如,如果我给出 key 3 并输入 I likeie!!
进行加密,我会得到 O olnh slh!!
我也尝试了 HELLO
并得到 NKRRU
。 isupper 部分还返回标点符号而不仅仅是字母。我还没有弄清楚为什么要更改原始消息以匹配密码消息。
#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main (int argc, string argv[])
{
/*
Get key from user at command line
Get plaintext from user
Use key to encipher text: c[i] = (p[i] + k)%26
Print ciphered message
*/
string message, cipher;
int key;
// command line, if user doesn't enter 2 arguments return 1 and request a valid
//encryption key and rerun.
if (argc != 2)
{
printf("Please enter a valid encryption key and rerun program.\n");
return 1;
}
else
{
key = atoi(argv[1]);
}
printf("Enter the message you wish to encrypt.\n");
message = GetString();
cipher = message;
int length = strlen(message);
for ( int i = 0; i < length; i++)
{
if (isalpha(message[i]))
{
if (isupper(message[i]))
{
cipher[i] = (message[i] - 'A' + key) % 26 + 'A';
}
else (islower(message[i]));
{
cipher[i] = (message[i] - 'a' + key) % 26 + 'a';
}
}
else continue; //message[i] contains punctuation or a space
}
printf("Your original message was..\n");
printf("%s\n", message);
printf("The encrypted message is...\n");
printf("%s\n", cipher);
return 0;
}
最佳答案
按 @interjay 的说法,拼写错误并缺少 if
。
改变
else (islower(message[i]));
至
// v
else if (islower(message[i]))
// or simply
else // Since `message[]` is an alpha, but not upper
出现错误,当文本为大写时,cipher[i] = (message[i] - 'A' ...
和 cipher[i] = (message[i ] - 'a' ...
发生。给定 cipher = message
,密码被应用了两次。
@keshlam 指出缺少缓冲区是一个重大问题。但我想知道 string
是什么类型。这是某种 C++ lite 字符串吗?如果它是 char *
,代码可以使用 cipher = strdup(message);
或
cipher = malloc(length + 1);
if (cipher === NULL) Handle_OutOfMemeory();
cipher[length] = '\0';
for ( int i = 0; i < length; i++)
...
关于C 中的凯撒密码适用于下层而不是上层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663698/
我有一个在 Android 上运行的 FMX 项目。我可以让 FMX 项目在“libTest.so”中执行一个 C 函数,如下所示: main.pas: TMyCallbackFun = proc
这与问题有关: String array to C++ function 虽然现在一切正常,但我唯一无法完成的事情是在出现错误时降低用户输入: 函数 bool lookupTerm(const std
我正在使用 lxc 2.0 并使用盐来调用容器的创建。我有多个图层,我想将其挂载为 overlayfs。我尝试使用 mount bind 与 lxc 1.0 一起工作,它成功了。 mount -t o
我是一名优秀的程序员,十分优秀!