2016-09-01 4 views
0

Ich versuche, Zahlen in 2 2D-Arrays zu scannen, und ich bekomme immer wieder den Fehler der Neudefinition.Probleme bei der Neudefinition von Funktionen

Der Code:

#include <stdio.h> 
#define N 3 

    void getMatrix(double mat[N][N]); 
/* 
char getMenuOption(); 
void getCoordinates(int*, int*); 
    void sumMatrices(double mat1[][N], double mat2[][N]); 
    void changeMatrix(double mat[][N]); 
    void printMatrix(double mat[][N]); 
*/ 
int main() { 
double A[N][N], B[N][N]; 
/* 
char option;*/ 
getMatrix(A[N][N]); 
getMatrix(B[N][N]); 
/* 

option = getMenuOption();*/ 

return 0; 
} 
    void getMatrix(double A[N][N]){ 
int i; 
for(i=0;i<=N;i++){ 
    for(i=0;i<N;i++) 
    { 
     scanf("%lf",&A[N][N]); 
    } 
    } 
    return; 

} 
    void getMatrix(double B[N][N]){ 
    int i; 
for(i=0;i<=N;i++){ 
    for(i=0;i<N;i++) 
    { 
     scanf("%lf",&B[N][N]); 
    } 
    } 
return; 
    } 

Ich denke, das Problem ist, dass die gleiche Funktion zweimal aufgerufen wird, aber im nicht so sicher darüber. Wenn mir jemand helfen kann, auf das Problem hinzuweisen, wird es sehr willkommen sein.

+2

'Problem besteht darin, dass die gleiche Funktion aufgerufen wird, zweimal, '..heh? Ist das nicht der einzige Zweck, sie zu haben ??? –

+1

Sie haben Ihre Funktion zweimal implementiert. Das ist nicht nötig. –

+0

Ich weiß es nicht.Ich habe nicht gesagt, dass dies der Fehler ist. – Eduard

Antwort

0

Die Funktion wird definiert zweimal

Erste Definition

void getMatrix(double A[N][N]){ 
int i; 
for(i=0;i<=N;i++){ 
    for(i=0;i<N;i++) 
    { 
     scanf("%lf",&A[N][N]); 
    } 
    } 
    return; 

} 

Zweite Definition

void getMatrix(double B[N][N]){ 
    int i; 
for(i=0;i<=N;i++){ 
    for(i=0;i<N;i++) 
    { 
     scanf("%lf",&B[N][N]); 
    } 
    } 
return; 
    } 

zu berücksichtigen, dass diese Anrufe der Funktion sind ungültig

getMatrix(A[N][N]); 
getMatrix(B[N][N]); 

Die Argumente haben den Typ double anstelle von Arrays oder Zeigern.

Sie sollten eine Definition der Funktion entfernen und die Funktion korrekt deklarieren.

Wenn der Compiler ermöglicht Arrays mit variabler Länge verwenden, dann sollte die functiuon wie

void getMatrix(size_t n, double A[n][n]); 

wenn variabler Länge Arrays vom Compiler nicht, dann können N unterstützt deklariert werden muss in der Tat eine konstante und die Funktion sein deklariert werden wie

#define N SOME_VALUE 
//... 
void getMatrix(double A[N][N]); 

und die Funktion wie

im ersten Fall rufen

getMatrix(N, A); 
getMatrix(N, B); 

und im zweiten Fall

getMatrix(A); 
getMatrix(B); 
1

Sie brauchen keine Funktion zweimal (nennen es zweimal oder mehr) zu definieren. Eine Funktion kann mehrmals aufgerufen werden, weshalb Funktionen an erster Stelle stehen. Befreien Sie sich von

void getMatrix(double B[N][N]){ 
    int i; 
for(i=0;i<=N;i++){ 
    for(i=0;i<N;i++) 
    { 
     scanf("%lf",&B[N][N]); 
    } 
    } 
return; 
    } 

Having said that, sollten Sie die Funktion wie

getMatrix(A); 
getMatrix(B); 

rufen Sie das Array zu übergeben (der Verwesung Zeiger sowieso). Die Notation A[N][N] ein Element des Arrays an und für ein Array definiert wie

double A[N][N]; 

es off-by-one, als Array Indexierungs in C beginnt von 0.

Verwandte Themen