gpt4 book ai didi

c - 视觉打印垃圾字母 - 凯撒密码练习

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:43 24 4
gpt4 key购买 nike

#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”类(class)中一直试图解决的一个练习。这是一个 ceaser cipher ,它需要一个字符串,一个 key ,并打印加密:c=(pi+k) % 26

c - 最终解密的字母pi = 字母的位置 (a=0. b = 1..)k = key

我的程序给出了正确的输出,但最后一行打印出垃圾字符: enter image description here

我以为是因为内存分配?但我还没有接触过它,我不想使用 cs50.h 包,因为我想按原样学习 c,而不是像他们那样使用“字符串”变量。

如有任何帮助,我们将不胜感激。

最佳答案

你的问题出在线路上

int length = sizeof(name);

sizeof 运算符以字节为单位返回变量的大小。在这种情况下,由于 name 是一个 char[100],因此该对象的大小为 100 字节。在您给出的示例中,明文(和密文)都小得多,因此您的循环运行并开始打印垃圾内存(即您分配但未用于存储消息的空间)。

你需要用的是

int length = strlen(name);

返回字符串的长度。请务必包含 string.h header 。

关于c - 视觉打印垃圾字母 - 凯撒密码练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46627354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com