[英]garbage value is being printed when a two multi dimensional array is sent as a parameter to a function
如果滿足條件,我編寫的這個程序可以乘以任何類型的矩陣
大多數代碼僅用於輸入 function 需要輸入的部分似乎是麻煩的地方,無法獲得正確的結果並且在結果矩陣中也獲得垃圾值。
#include<stdio.h>
#include<math.h>
void multiply(int,int,int,int,int [][100],int [][100]);
void main()
{
int i,j,e;
int m,n,p,q;
int a[m][n],b[p][q];
printf("\n enter m and n");
scanf("%d %d",&m,&n);
printf("\n enter the matrix elements");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("\n enter p and q");
scanf("%d %d",&p,&q);
printf("\n enter the matrix elements");
for(i=0;i<p;i++)
for(j=0;j<q;j++)
scanf("%d",&b[i][j]);
printf("if u want to multliply the matrix enter 1");
scanf("%d",&e);
{
printf("a matrix n is columns and m is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("a matrix q is columns and p is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",b[i][j]);
}
printf("\n");
}
printf("\n\n\n");
if(e==1&&n==p)
multiply(m,n,p,q,a,b);
}
}
void multiply(int m,int n,int p,int q,int a[][100],int b[][100])
{
printf("a matrix n is columns and m is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("a matrix q is columns and p is rows \n");
for(int i =0;i<m;i++){
for(int j = 0;j<n;j++){
printf("%d ",b[i][j]);
}
printf("\n");
}
int s[m][q],sum=0,i,j,k;
for(i=0;i<m;i++)
{
for(j=0;j<q;j++)
{
s[i][j]=0;
for(k=0;k<n;k++)
{
s[i][j]=s[i][j]+a[i][k]*b[k][j];
}
printf("\t %d",s[i][j]);
}
printf("\n");
}
}
如何解決這個問題?
至少這個問題:
代碼中有undefined bahvaior (UB)作為數組a, b
定義時m, n, p, q
的值不一定為正。
int m,n,p,q;
int a[m][n],b[p][q];
改成:
int m,n,p,q;
// int a[m][n],b[p][q];
printf("\n enter m and n");
// scanf("%d %d",&m,&n);
if (scanf("%d %d",&m,&n) != 2 || m <= 0 || n <= 0) {
puts("Bad input");
return -1;
}
int a[m][n];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.