【发布时间】:2017-10-08 03:53:06
【问题描述】:
#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
c - 最终解密的字母 pi = 字母的位置 (a=0. b = 1..) k = 钥匙
我虽然是因为内存分配?但是我还没接触过,也不想用cs50.h包,因为我想按原样学习c,而不是像他们那样使用“字符串”变量。
任何帮助将不胜感激。
【问题讨论】:
-
您的缓冲区中有
sizeof字节,但%s仅初始化它读取的字节数。不要循环到length,而是只循环到strlen(name)(包括<string.h>)
标签: c encryption cs50 caesar-cipher