0
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
int main()
{
char name[100];
int key;
printf("enter plaintext:\n");
fgets(name, 100, stdin);
int length = sizeof(name);
printf("please enter key:");
scanf("%d", &key);
printf("plain text: %s\n", name);
printf("ciphertext:");
for (int i = 0; i < length; i++) {
if (name[i] >= 65 && name[i] <= 90) {
int c = (int)(name[i] - 'A');
char d = 'A' + (char)((c + key) % 26);
printf("%c", d);
}
else if (name[i] >= 97 && name[i] <= 122) {
int c = (int)(name[i] - 'a');
char d = 'a' + (char)((c + key) % 26);
printf("%c", d);
}
else
printf("%c", name[i]);
}
return 0;
}
你好, 所以這是一個練習,我一直在嘗試的過程中「CS50」哈佛來解決。 這是一個凱撒密碼,它需要一個字符串,一個鍵,並打印加密: C =(PI + K)%26視覺打印垃圾信件 - 凱撒密碼鍛鍊; Tibial
c - 接收最終解密信 PI =的位置的字母(A = 0 b = 1 ..) K =關鍵
不過,我覺得這是因爲內存分配?但是我還沒有觸及它,我不想使用cs50.h包,因爲我想按照它的方式學習c,而不是像他們那樣使用「字符串」變量。
任何幫助,將不勝感激。
你的緩衝區中有'sizeof'字節,但'%s'只能初始化它讀取的字節數。而不是循環到'length',只循環到'strlen(name)'(並且包括'') –