gpt4 book ai didi

memory - Rot13 实现 : error in translate_string function

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:46 25 4
gpt4 key购买 nike

我写了一个 rot13.c 程序,但我可以在 rot13_translate_string 内的循环中告诉我一些东西导致程序只打印出空行。

有什么想法吗?谢谢!

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

char rot13_translate_character(char c)
{
if( 'A' <= c && c <= 'M' )
{
return c + 13;
}
else if( 'N' <= c && c <= 'Z' )
{
return c - 13;
}
else if( 'a' <= c && c <= 'm' )
{
return c + 13;
}
else if( 'n' <= c && c <= 'z' )
{
return c - 13;
}
else
{
return c;
}
}

char *rot13_translate_string(const char *str)
{
int len = strlen(str);
char *translation = calloc(len, sizeof(char));

int i;

do //****HERE IN THIS SECTION
{
/* Translate each character, starting from the end of the string. */
translation[len] = rot13_translate_character(str[len]);
len--;
} while( len < 0 ); //<

return translation;
}

这是主要部分(同一文件的一部分)- my for i = 1 的条件是否正确?

int main(int argc, char **argv)
{
if( argc < 2)
{

fprintf(stderr, "Usage: %s word [word ...]\n", argv[0]);
return 1;
}

/* Translate each of the arguments */
int i;
for( i = 1; i < argc; i++) //*****IS this right?
{
char *translation = rot13_translate_string( argv[i] );
fprintf(stdout, "%s\n", translation);
}

return 0;
}

最佳答案

正如 Janis 所指出的那样,控制是在循环do ... while 上进行的。应该是
while( len >= 0 );

“while”循环 在控制表达式为 时运行(并在表达式变为假时终止)。您在循环之前定义变量 len 并且它不能是 <0 .
所以你永远不会真正进入循环。

由于 fprintf(stdout, "%s,您为每个输入词获得一行<强> \n ", translation);行,为每个(空)字打印一行(\n)。

在其他语言中,例如在 Pascal 中,有“repeat until”循环构造,它继续运行直到控制表达式为真,并且只有在那之后它改变它终止。
在这种情况下,您可以使用 <0 的条件。 .在 C 中,为了遵循相同的逻辑,您可以使用 while 循环 并否定条件。在你的情况下
} while (! (len < 0) );

关于memory - Rot13 实现 : error in translate_string function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29363712/

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