密碼適用於islower部分,但不是isupper部分。例如,如果我給3的密鑰並輸入I like pie!!
加密,我得到O olnh slh!!
我也試過HELLO
並得到NKRRU
。 isupper部分也是返回標點符號而不僅僅是字母。我還沒有弄清楚爲什麼原始消息正在被改變以匹配密碼消息。C中的凱撒密碼工作於低於而不是較高
#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;
}
您還需要在那裏添加一個'if'。 – interjay
我假設字符串typedef'd爲'char *'。不是很好的做法,但我對許多課程感到不滿意,正如我們在這裏得到的問題所暗示的。 – keshlam
@keshlam我懷疑你是對的。 – chux