我想知道我是如何在C中读取(或写入)数组中错误的元素的?
我正试图用一个2D数组在C中绘制pascal三角形 我认为出错的地方与我如何读取或写入数组有关。当我在(第一个)for循环中查找一个数字时,我所做的似乎是有效的,但不在它之外 我是在用Python编写了一些代码之后才开始写这篇文章的,我是C语言的新手 这是我的代码:我想知道我是如何在C中读取(或写入)数组中错误的元素的?,c,arrays,C,Arrays,我正试图用一个2D数组在C中绘制pascal三角形 我认为出错的地方与我如何读取或写入数组有关。当我在(第一个)for循环中查找一个数字时,我所做的似乎是有效的,但不在它之外 我是在用Python编写了一些代码之后才开始写这篇文章的,我是C语言的新手 这是我的代码: #include <stdio.h> #include <stdlib.h> #include <math.h> void main() { int n, i , j; int
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
int n, i , j;
int x[n][n];
n = 4;
for (j=0; j<n; j++)
{
for(i=0; i<n; i++)
{
if (i == 0)
{
x[0][j] = 1;
printf("\n(%d, %d)", i,j);
}
if (i != 0)
{
x[i][j] = 0;
}
printf("%d", x[i][j]);
}
}
printf("\n\n(x[0][0]) %d", x[0][0]);
printf("\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < (n); j++)
{
if (j == 0)
{
printf("\n%d ", x[i][j]);
}
else
{
x[i][j] = x[i-1][j-1] + x[i][j-1];
printf("%d ", x[i ][j ]);
}
}
}
printf("\n");
return;
}
#包括
#包括
#包括
void main()
{
int n,i,j;
int x[n][n];
n=4;
对于(j=0;j校正:
不指定n
值
x[n][n]
将不起作用
或者尝试使用动态分配来使用这样的运行时数组
我希望这会有所帮助。谢谢。我在您的第二组循环中看到的一个关键问题是:
x[i][j] = x[i-1][j-1] + x[i][j-1];
如果j==0,则可以避免这种情况,但如果i==0,则无法避免。例如,当j==1但i==0时,将尝试访问数组中x[-1][0]处的位置,该位置位于数组分配的内存之外
我认为您尤其希望将第二组循环更改为如下内容:
for(i = 0; i < n; i++)
{
for(j = 0; j < (n); j++)
{
if ((i == 0) || (j == 0))
{
printf("\n%d ", x[i][j]);
}
else
{
x[i][j] = x[i-1][j-1] + x[i][j-1];
printf("%d ", x[i ][j ]);
}
}
}
(i=0;i
{
对于(j=0;j<(n);j++)
{
如果((i==0)| |(j==0))
{
printf(“\n%d”,x[i][j]);
}
其他的
{
x[i][j]=x[i-1][j-1]+x[i][j-1];
printf(“%d”,x[i][j]);
}
}
}
注意,内部if条件已从if(j==0)更改为if((i==0)| |(j==0))以防止索引超出数组边界。
int n
-->int n=4
这是正确的@BLUEPIXY@Ollie检查我的答案是否有帮助谢谢这是主要问题我想我已经接受并投了赞成票,但由于我没有足够的因果报应,所以无法看到赞成票。是的,这不是问题,我的答案应该是有帮助的这对我来说很有价值:)谢谢,这是一个问题,但修复程序并不完美,因为我正在尝试打印它,所以\n只适用于I==0的情况,所以我将:for(I=0;I