簡體   English   中英

當二維多維數組作為參數發送到 function 時打印垃圾值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM