gpt4 book ai didi

C 凯撒密码函数调用未按预期运行

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

我正在尝试构建一个程序,该程序将在文本文件上执行简单的凯撒密码,其中包含每行没有空格的单个字符串。由于某种原因,我的密码函数不会移动文本,并且我会以不同的字符长度截断字符串。你能看到我在 while 循环中的函数调用哪里搞砸了吗?

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

#define FILE_NAME "./infile.txt"

void caeser (char * ch, int shift)
{
int i = 0;
int len = strlen(ch);

while (ch[i] < len)
{
if (islower(ch[i]))
ch[i] = ((ch[i] - 'a' + shift) % 26 + 'a');
else
ch[i] = ((ch[i] - 'A' + shift) % 26 + 'A');
}i++;

printf("Caesar Cipher = %s\n", ch);

}

int main(void)
{
char * c = malloc( sizeof(char) * 1000);


FILE* fp = fopen (FILE_NAME, "r");
if (fp == NULL)
{
printf("Can't open %s\n", FILE_NAME);
exit(EXIT_FAILURE);
}

while(fgets(c, sizeof(c), fp) != 0)
{
printf("%s\n", c);
caeser(c, 1);
}

fclose(fp);
fp = NULL;
return 0;
}

最佳答案

我对您的代码做了一些更改,并用粗体标记了它们。

数组从0开始,以第n-1个字符结束。

您检查了 ch[i] < len 是否。ch[i] 是数组第 i 处的字符,而不是数字。

在每次迭代中,您需要将 i 加 1。这样您就可以获得下一个字符。

为了更好的设计,尝试将可打印格式打磨到主函数中,而不是在函数中打印。您应该返回一个指向字符串的指针并在 main 中打印它。

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

#define FILE_NAME "./infile.txt"

void caeser (char * ch, int shift)
{
int i = 0;
int len = strlen(ch);

while (**i < len-1**)
{
if (islower(ch[i]))
{
ch[i] = ((ch[i] - 'a' + shift) % 26 + 'a');
**i++;**
}
else
{
ch[i] = ((ch[i] - 'A' + shift) % 26 + 'A');
**i++;**
}
}
printf("Caesar Cipher = %s\n", ch);
}

int main(void)
{
char * c = malloc( sizeof(char) * 1000);


FILE* fp = fopen (FILE_NAME, "r");
if (fp == NULL)
{
printf("Can't open %s\n", FILE_NAME);
exit(EXIT_FAILURE);
}

while(fgets(c, sizeof(c), fp) != 0)
{
printf("%s\n", c);
caeser(c, 1);
}

fclose(fp);
fp = NULL;
return 0;
}

关于C 凯撒密码函数调用未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53251785/

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