【发布时间】:2017-04-16 19:34:08
【问题描述】:
感谢您的帮助,抱歉我的英语不好 我正在尝试使用具有函数的矩阵从用户输入或用随机数填充矩阵然后打印它,但我只能打印最后一行,我认为问题与指针有关,请帮助我 用户选择是否要填充矩阵或使用随机数来完成, 这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 25
#define MIN 10
int i, j, y, x, n;
int mat [MAX] [MAX];
int main ()
{
int x, y, i, j, user, n;
printf ("Goodmorning, insert matrix dims (y,x): ");
scanf ("%d %d",&y,&x);
for (i=0;i<y;i++)
for (j=0;j<x;j++)
mat [i] [j] = 0;
printf ("\nInsert '0' for random, insert '1' for manual: ");
scanf ("%d", &user);
if (!user)
rand_matrix (mat [x], x, y);
if (user)
input_matrix (mat [x], x, y);
stampa_matrix (mat [x], x, y);
return 0;
}
rand_matrix (int matrix [y] [x] , int b, int a)
{
srand(time(NULL));
for (i=0;i<a;i++)
for (j=0;j<b;j++)
{
n = rand () % MAX + MIN;
matrix [i] [j] = n;
}
}
input_matrix (int matrix [y] [x], int b, int a)
{
for (i=0;i<a;i++)
for (j=0;j<b;j++)
scanf ("%d", &matrix[i] [j]);
}
stampa_matrix (int matrix [y] [x] , int b, int a)
{
for (i=0;i<a;i++)
{
printf ("\n");
for (j=0;j<b;j++)
printf ("%3d ", matrix [i] [j] );
}
}
【问题讨论】:
-
rand_matrix (mat [x], x, y);-->rand_matrix (mat, x, y); -
rand_matrix (int matrix [y] [x] , int b, int a)-->rand_matrix (int matrix [y] [MAX] , int b, int a) -
在调用任何
scanf()系列函数时,始终检查返回值(而不是参数值)以确保操作成功。 -
发布的代码无法检查
x和y值以确保它们在 1...MAX 范围内,因此用户可以输入大于MAX的值对于这些值中的任何一个,都会导致(最终)缓冲区溢出。这种溢出是未定义的行为,可能导致段错误事件。
标签: c function pointers matrix