gpt4 book ai didi

java - 用C写Java这段?

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

我不是 C 程序员。我上周才开始阅读 K&R 的 TCPL。我用 Java 编写了这 42 行代码。我尝试将它转换为 C,但它给我一个段错误。

这是 Java 版本:http://codepaste.net/m8jz6m

我尝试将其移植到 C: 失败

//Not working.
#include <stdlib.h>
#include <string.h>
 
void caesar ( const int SIDE )
{
int array [SIDE] [SIDE] ;

for ( int number = 1; number <= SIDE * SIDE; ++ number )
array [ getY ( number, SIDE ) ] [ getX ( number, SIDE ) ] = number ;

for ( int Y = 0; Y < SIDE; ++ Y ) {
for ( int X = 0; X < SIDE; ++ X)
printf ( sprintf ("%%%dd" , strlen(itoa(SIDE*SIDE))), array [Y] [X] );
printf ("\n");
}
}
 
int getX ( const int number, const int SIDE )
{
return SIDE == 1 ? 0 : number > 4 * SIDE - 4 ? 1 + getX ( number - 4 * SIDE + 4, SIDE - 2 ) : number >= 3 * SIDE - 2 ? 0 : number >= 2 * SIDE - 1 ? 3 * SIDE - 2 - number : number > SIDE ? SIDE - 1 : number - 1 ;
}
 
int getY ( const int number, const int SIDE )
{
return SIDE == 1 ? 0 : number > 4 * SIDE - 4 ? 1 + getY ( number - 4 * SIDE + 4, SIDE - 2 ) : number >= 3 * SIDE - 2 ? 4 * SIDE - 3 - number : number >= 2 * SIDE - 1 ? SIDE - 1 : number > SIDE ? number - SIDE : 0 ;
}
 
void main ( int argc, char *argv )
{
if ( argc == 0 )
printf ("\tUsage: java Caesar [side] | side:> Length and breadth of the square.\n");
else
caesar ( atoi( argv[1] ) );
}
 
void itoa(int n, char s[])
{
int i, sign;

if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}

/* reverse: reverse string s in place */
void reverse(char s[])
{
int i, j;
char c;

for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}

请让我知道哪里出错了。

最佳答案

  • 您正在用一个参数调用您的 itoa() 函数,而该函数实际上需要两个参数。

  • 此外,似乎这一行:

    array [ getY ( number, SIDE ) ] [ getX ( number, SIDE ) ] = number ;

    可以用这样的方式更好地表达:

    array[number / SIDE][number % SIDE] = number;

    不使用那些 getXgetY 函数(奇怪的是递归的)。我没有详细检查这些功能以了解它们实际做了什么,但您可以考虑在任何情况下进行上述修改。

  • sprintf() 使用不正确的参数调用。第一个参数应该是目标缓冲区。您似乎在使用它,就好像它返回了一个字符串(它没有)。

  • 在 printf 格式说明符中查找 * 的函数。

关于java - 用C写Java这段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3334736/

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