gpt4 book ai didi

c - 在 Eclipse 中编译 C 语言凯撒密码时遇到困难

转载 作者:行者123 更新时间:2023-11-30 19:45:11 25 4
gpt4 key购买 nike

我的问题是 Eclipse 没有向我显示代码中存在哪些错误,但它仍然在编译。但是当我运行程序时什么也没有发生。我什至没有看到第一行 printf 。

好的,这是提示:

您将编写一个程序,使用凯撒密码对消息进行加密。用户将输入 key 的值和要加密的消息。下面显示了一个运行示例你的程序的输出应该完全遵循这个格式。用户输入用下划线显示。

输入类次金额(1-25):

3

输入要加密的消息:

来吧,让我开心。

加密消息:Jr dkhdg、pdnh pb gdb。

我的代码:

#include <stdio.h>
#include <ctype.h>

char encrypt(char ch, int k){

if (isalpha(ch)){

if (isupper(ch)) {
ch = ch + k;
if (ch > 'Z') {
ch = ch - k;
ch = ((ch - 65) + k) % 26 + 65;
}
}
else {
ch = ch + k;
if (ch > 'z'){
ch = ch - k;
ch = ((ch - 97) + k) % 26 + 97;
}
}
}



return ch;
}

void main(){
int k = 0;
char ch = 'a';
printf("Enter shift amount (1-25):\n");
scanf("%d ", &k);
printf("Enter message to be encrypted:\n");
ch = getchar();

while(ch != '\n'){
encrypt(&ch, k);
}

printf("\n");
printf("Encrypted message: ");
while(ch != EOF){
putchar(ch);

}
return 0;
}

最佳答案

使用小写字母ch = ch + k;可能会溢出char

使用 int 数学运算执行 %26

    if (isupper(ch)) {
ch = (ch - 'A' + k)%26 + 'A';
}
else if (isupper(ch)) {
ch = (ch - 'a' + k)%26 + 'a';
else {
Report_BadInput();
}

输入困惑

printf("Enter shift amount (1-25):\n");
// scanf("%d ", &k); The space really messes things up.
// The space tells `scanf()` to keep on scanning until non-white-space is found.
scanf("%d", &k);

读取和打印循环困惑。

printf("Enter message to be encrypted:\n");
int ch; // Use int here
while ((ch = getchar()) != '\n') && (ch != EOF) {
if (isalpha(ch) {
ch = encrypt(ch, k);
}
putchar(ch);
}
putchar('\n');

关于c - 在 Eclipse 中编译 C 语言凯撒密码时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26793049/

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