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)'(并且包括'') –