2017-11-11 1 views
0
void enterTwoArrays() 
{ 
    printf("Enter m!\n"); 
    scanf("%d",&m); 
    printf("Enter n!\n"); 
    scanf("%d",&n); 
    int arr[m][n]; 

    printf("Enter m2!\n"); 
    scanf("%d",&m2); 
    printf("Enter n2!\n"); 
    scanf("%d",&n2); 
    int arr2[m2][n2]; 

    for(i=0; i<=m-1; i++) 
    { 
     for(j=0; j<=n-1; j++) 
     { 
      scanf("%d",&arr[i][j]); 
     } 
    } 

    for(i=0; i<=m2-1; i++) 
    { 
     for(j=0; j<=n2-1; j++) 
     { 
      scanf("%d",&arr2[i][j]); 
     } 
    } 
} 

void addition(int arr[m][n], int arr2[m2][n2]) 
{ 
    int arr3[m][n]; 
    for(i=0; i<=m-1; i++) 
    { 
     for(j=0; j<=n-1; j++) 
     { 
      arr3[i][j]=arr[i][j]+arr2[i][j]; 
     } 
    } 
} 

Hey, ich habe ein Problem. Ich habe diese zwei Funktionen in C. Die Idee ist, dass ich in der ersten Funktion Arrays erstellen und füllen werde. Und die 2. Funktion wird Werte von zwei Arrays hinzufügen. Aber wenn ich es versuche, zerfällt das Programm. Ich denke ich weiß wo das Problem liegt. Weil meine Arrays irgendwie lokal sind und ich sie später nicht von der Hauptfunktion zur zweiten Funktion senden kann. Wie kann ich dieses Problem lösen? Ich kann diese Arrays nicht vorher in main/be4 main deklarieren, ohne n- und m-Variablen zu kennen.Wie mache ich mein Array in Funktion global in C gemacht?

+0

Sie könnten Zeiger auf die Arrays übergeben. –

+0

übergeben Zeiger auf Arrays als Argumente in Ihren Funktionen. –

+0

Ich sehe nichts an sich falsch mit Ihrem Code selbst, aber es hängt davon ab, dass 'm2' und' n2' mindestens so groß wie 'm' und' n' sind. Wenn dies bei einem gegebenen Lauf nicht der Fall ist, versucht die Funktion addition() ', außerhalb ihrer Grenzen auf" arr2 "zuzugreifen. Vielleicht sollten Sie stattdessen nur einen gemeinsamen Satz von Dimensionen lesen und ihn für beide Arrays verwenden. –

Antwort

0

Sie können einen Zeiger global deklarieren und Speicher zuweisen, nachdem Sie die Zeile und Spalte vom Benutzer genommen haben. Hier habe ich die gleiche Zeile und Spalte für beide Matrix genommen, da dies eine notwendige Bedingung für die Addition von Matrizen ist.

#include<stdio.h> 
#include<stdlib.h> 

int *arr; 
int *arr2; 
int row; 
int col; 
void enterTwoArrays() 
{ 
    int i,j,t=0; 
    printf("Enter rows!\n"); 
    scanf("%d",&row); 
    printf("Enter cols!\n"); 
    scanf("%d",&col); 

    arr=(int*)malloc(row *col *sizeof(int)); 
    arr2=(int*)malloc(row *col *sizeof(int)); 

    printf("Enter the first matrix:\n"); 

    for(i=0; i<(row*col); i++) 
    { 
     scanf("%d",(arr+i)); 
    } 

    printf("Enter the second matrix:\n"); 
    for(i=0; i<(row*col); i++) 
    { 
     scanf("%d",(arr2+i)); 
    } 

} 

void addition(int *arr, int *arr2) 
{ 
    int *arr3; 
    int i; 

    arr3=(int*)malloc(row*col*sizeof(int)); 

    for(i=0; i<row*col; i++) 
    { 
     *(arr3+i)=*(arr+i)+*(arr2+i); 
    } 

    printf("The matrix after addition is: \n"); 
    int j,t=0; 

    for(i=0;i<row;i++) 
    { 
     for(j=0;j<col;j++,t++) 
     { 
      printf("%d ",*(arr3+t)); 
     } 
     printf("\n"); 
    } 
} 

void main() 
{ 
    enterTwoArrays(); 
    addition(arr,arr2); 
} 
Verwandte Themen