#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define length 100
void print_array();
int main()
{
int m,n,i,j;
int A[length][length];
printf("Give dimensions of array (up to 100x100):\ni:\n");
scanf("%d",&i);
printf("j:\n");
scanf("%d",&j);
srand(time(NULL));
for (m=0;m<i;m++)
{
for (n=0;n<j;n++)
{
A[m][n]=rand()%45+1;
printf("A[%d,%d]=%d\n",m,n,A[m][n]);
}
}
print_array(i,j,A);
return 0;
}
void print_array(int i,int j,int A[][j])
{
printf("\n");
int m,n;
for (m=0;m<i;m++)
{
for (n=0;n<j;n++)
{
printf("A[%d,%d]=%d\n",m,n,A[m][n]);
}
}
}
您好。我试图通过调用函数print来打印2d数组,但是当我运行程序时,我得到:
对于第一个printf()
正确的值:
A[0,0]=25
A[0,1]=19
A[0,2]=13
A[1,0]=4
A[1,1]=17
A[1,2]=43
A[2,0]=7
A[2,1]=37
A[2,2]=20
但是当我在printf()
的函数调用中使用第二个print_array
时,我得到了:
A[0,0]=25
A[0,1]=19
A[0,2]=13
A[1,0]=0
A[1,1]=0
A[1,2]=0
A[2,0]=0
A[2,1]=0
A[2,2]=0
好像我想念指针......谢谢。
答案 0 :(得分:2)
这是C99,对吧?
问题是你混淆了数组大小。
主程序有int A[length][length]
,但是您调用最终维度A[][j]
的动态大小的函数。如果j != length
,则函数将错误地索引数组。
我建议将函数调用中的数组表示为指向第一个元素的裸指针,并手动执行索引:
void print_array(const int *A, size_t width, size_t height)
{
for(size_t i = 0; i < height; ++i)
{
for(size_t j = 0; j < width; ++j)
printf("A[%zu][%zu] = %d\n", i, j, A[i * width + j]);
}
}
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <time.h>
#define length 100
void print_array(int i,int j,int A[length][length]);
int main()
{
int m,n,i,j;
int A[length][length];
printf("Give dimensions of array (up to 100x100):\ni:\n");
scanf("%d",&i);
printf("j:\n");
scanf("%d",&j);
srand(time(NULL));
for (m=0;m<i;m++)
{
for (n=0;n<j;n++)
{
A[m][n]=rand()%45+1;
printf("A[%d,%d]=%d\n",m,n,A[m][n]);
}
}
print_array(i,j,A);
return 0;
}
void print_array(int i,int j,int A[length][length])
{
printf("\n");
int m,n;
for (m=0;m<i;m++)
{
for (n=0;n<j;n++)
{
printf("A[%d,%d]=%d\n",m,n,A[m][n]);
}
}
}
除上述内容外,您还需要对维度(i
和j
)进行一些输入验证。它们不应超过length
。如果它超过length
那么你会遇到问题。
答案 2 :(得分:0)
void print_array(int i,int j,int A[][j])
应该是
void print_array(int i,int j,int A[][length])
当您告诉编译器实际数组的维度与您之前指定的维度不同时,它会访问错误的元素。 A
总是100x100,你只是不填写所有内容。
答案 3 :(得分:0)
您需要在函数签名中定义数组int A[][]
的大小。请改用此功能:
void print_array(int i,int j,int A[length][length])
{
printf("\n");
int m,n;
for (m=0;m<i;m++)
{
for (n=0;n<j;n++)
{
printf("A[%d,%d]=%d\n",m,n,A[m][n]);
}
}
}
答案 4 :(得分:0)
你已经将A声明为int A [length] [length],但是在print_array函数中你将其声明为A [] [j],这意味着在你的函数A中有一个不同数量的colones导致这个错误。
更改此行
void print_array(int i,int j,int A[][j])
这一个
void print_array(int i,int j,int A[][length])
答案 5 :(得分:0)
首先,您应该使用正确的原型
转发声明您的函数void print_array(int n,int m, int A[n][m]);
然后使用正确的尺寸
print_array(length, length, A);
除此之外:
size_t
代替int
i
和j
为索引,n
和m
作为尺寸。坚持这样的约定使得代码更易于阅读。答案 6 :(得分:0)
array and matrix printing functions are little similar but tricky.. but i have worked on it and found out some thing and i think it will be useful for all here is a simple C code for Function for printing matrix
#include<stdio.h>
void printmatrix(int l,int x,int y,int *p_arr);
void putvalue(int l,int x,int y,int *r_arr);
/* ******** Function to insert some random value in to a Matrix ************ */
void putvalue(int l,int x,int y,int *r_arr)
{
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
r_arr[(l*i)+j]=i+j+10;
}
}
}
/* *********Function to Print any Matrix ********** */
void printmatrix(int l,int x, int y,int *p_arr)
{
int i,j;
printf("\n");
for(i=0;i<x;i++)
{
printf("\n");
for(j=0;j<y;j++)
{
printf(" %d",p_arr[(l*i)+j]);
}
}
}
/* ****** Main ****** */
void main()
{
int i,j,l;
int Big_arr[80][100],Small_arr[20][40];
// ****** I have taken two different size arrays *****
int x,y;
clrscr();
printf("\n Enter x and y values under 20X40:"); // Because of screen size of Output
scanf("%d %d",&x,&y);
if((x!=0)&&(y!=0))
{
printf("\n %dX%d",x,y);
l=sizeof(Big_arr[0])/sizeof(Big_arr[0][0]); // **** l is the length of a single row of matrix
putvalue(l,x,y,(int*)Big_arr);
printf("\n Printing Big_arr");
printmatrix(l,x,y,(int*)Big_arr);
l=sizeof(Small_arr[0])/sizeof(Small_arr[0][0]);
putvalue(l,x,y,(int*)Small_arr);
printf("\n Printing Small_arr");
printmatrix(l,x,y,(int*)Small_arr);
}
else
printf("\n ***** Enter valied x and y values *****");
getch();
}
hope u like it.