#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
int n, m, i, j, status, maxr = 0, maxc = 9, temp;
int k, q, r , state = 0, t = 1;
int ar[n][m];
puts("Enter two numbers represents two dimensional array, N * M");
puts("This program will find the saddle points");
puts("The numbers in arrays is totally random");
srand((unsigned int) time(0)); //randomize seed
while (status = scanf("%d %d", &n, &m) != 2)
{
if (status == EOF)
break;
else
{
puts("You should have entered two integers");
puts("Try again");
while (getchar() != '\n')
continue;
puts("Enter two numbers represents two dimensional array, N * M");
continue;
}
}
for (j = 0; j < m; j++) //establish a random two dimensional array
{
for (i = 0; i < n; i++)
{
ar[i][j] = (rand() % 10);
printf("%d\n", ar[i][j]);
}
}
for (j = 0; j < m; j++)
{
for (i = 0; i < n; i++)
{
printf("%d\n", ar[i][j]);
}
}
}
我想创建一个包含随机数的二维数组。所以我使用rand()
函数,并使用srand
函数随机播种。
现在我确信我得到随机数,但似乎我无法将这些随机数保存到数组中。为了验证这一点,我创建了两个循环循环,事实证明结果是不同的。数组a[i][j]
应该相同,但实际上是不同的。
那么我该如何解决这个问题?
答案 0 :(得分:2)
首先,n
和m
未初始化为任何已知值。您需要在 n
和m
之后声明该数组。
修复该错误后,对于定义为int ar[n][m];
的数组,您必须像这样迭代它:
for(int x=0; x<n; x++)
for(int(y=0; y<m; y++)
ar[x][y] = ....;
不仅要防止明显的越界错误,还要保证最佳使用数据缓存。给定数组数据ar[2][3] = {{1, 2, 3}, {4, 5, 6}}
,它作为
1 2 3 4 5 6
这是缓存友好的,因为所有值都是相邻存储的。如果从左到右遍历这个内存,那么数组可以存储在高速缓冲存储器中,并且CPU不需要在循环中的每一圈从RAM中获取值,这样会慢一些。
答案 1 :(得分:1)
n和m在声明数组时具有不确定的值。
int n, m;
int ar[n][m]; // can be any value for n and m
你应该阅读动态分配数组