此问题旨在应用凯撒密码。目的是加密用户定义的消息。该问题要求我们使用命令提示符来获取密钥。收到消息和密钥后,我们必须通过移动密钥来加密每个字符。例如如果键是1,则A-B以及b-c和z-a,如果键是2,则a-c,D-F等。。。使用check50来检查我的代码,它看起来有很多错误,但输出是相同的...我只是不明白我的代码有什么问题。
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("Usage: ./caesar key\n");
return 1;
}
for (int i = 0; argv[1][i] != '\0'; i++)
{
if (isalpha(argv[1][i]))
{
printf("Usage: ./caesar key\n");
return 1;
}
}
int key = atoi(argv[1]);
string ptext;
ptext = get_string("plaintext: ");
printf("ciphertext: ");
int n = strlen(ptext);
for (int i = 0; i <= n; i++)
{
if (isupper(ptext[i]))
{
printf("%c", (((ptext[i] + key) - 65) % 26) + 65);
}
else if (islower(ptext[i]))
{
printf("%c", (((ptext[i] + key) - 97) % 26) + 97);
}
else
{
printf("%c", ptext[i]);
}
}
printf("\n");
return 0;
}
链接到check50 https://submit.cs50.io/check50/f7714d6b10c0b2e9fd1c1f01f4209195d8dc5163
答案 0 :(得分:1)
您正在输出空终止符。
int n = strlen(ptext);
for (int i = 0; i <= n; i++)
您应该只循环到i < n
。