Как отмечено usr2564301 в комментарии , вам нужно объявить Ciphertext
один раз, чтобы он не go вышел из области видимости. Когда он выходит из области видимости, старое значение формально теряется - вы можете или не можете увидеть его снова (поскольку доступ к неинициализированной памяти является неопределенным поведением, поэтому любой результат действителен).
Обратите внимание, что хотя вы конвертируйте argv[1]
в целое число, вы не используете результат. Символ + 1
в кодировке означает, что он выглядит так, как будто вы всегда указали 1
как argv[1]
. Ваш код не выполняет перенос, поэтому z
отображается на a
. Он также неправильно обрабатывает прописные и строчные буквы. Вы, вероятно, не должны пытаться кодировать не буквы, либо. Однако, эта довольно простая адаптация вашего кода, по крайней мере, производит видимость результата:
#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
//#include <stdlib.h> // Needed if atoi() is called
#include <string.h>
int main(int argc, string argv[])
{
// This checking is not relevant while the encryption only adds 1
if (argc != 2)
{
printf("Usage: ./caesar key\n");
return(1);
}
int j = strlen(argv[1]);
for (int i = 0; i < j; i++)
{
if (!isdigit(argv[1][i]))
{
printf("Fail\n");
return(1);
}
}
// int convert = atoi(argv[1]);
string Plaintext = get_string("Plaintext: ");
int z = strlen(Plaintext);
char Ciphertext[z];
for (int i = 0; i < z; i++)
{
Ciphertext[i] = (Plaintext[i] + 1); // Should use convert, etc
}
printf("Ciphertext: ");
for (int i = 0; i < z; i++)
{
printf("%c", Ciphertext[i]);
}
printf("\n");
return 0;
}
Пример выполнения (программа cs79
, созданная из исходного кода cs79.c
):
$ cs79 13
Plaintext: Bright vixens jump; dozy fowl quack.
Ciphertext: Csjhiu!wjyfot!kvnq<!ep{z!gpxm!rvbdl/
$