2016-09-01 7 views
0

2次元配列に数値をスキャンしようとしていますが、私は再定義のエラーを受け取り続けます。関数の再定義の問題を取得する

コード:

#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; 
    } 

私はこの問題は、同じ関数が2回呼び出されていることですが、それについてイムのでわからないと思います。 誰かが私がこの問題を指摘するのを助けることができれば、それは大歓迎です。

+2

から始まるよう

double A[N][N]; 

ように定義された配列のためには、オフずつの 'の問題は、同じ関数が呼び出されることです二度、 "..あ?それはそれらを持つ唯一の目的ですか? –

+1

関数を2回実装しました。それをする必要はありません。 –

+0

私は知らない。私はこれがエラーではないと言っていませんでした。 – Eduard

答えて

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; 

} 

2番目の定義

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; 
    } 

定義されて無効

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

引数に配列またはポインタの代わりにdoubleの型があります。

関数の定義を1つ削除し、関数を正しく宣言する必要があります。

コンパイラは可変長配列を使用することができます場合は、functiuonは可変長配列がコンパイラによってサポートされていないならば、Nが実際に宣言することができる定数と関数でなければなりません

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

のように宣言する必要があります

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

と最初のケースで

のような関数を呼び出すよう

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

と第2ケース

getMatrix(A); 
getMatrix(B); 
1

にあなたは二回(2回以上、それを呼び出すために)機能を定義する必要はありません。 1つの関数を複数回呼び出すことができます。これが最初の関数を持つ理由です。

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; 
    } 

あなたは(とにかく、ポインタに崩壊)の配列を渡すには

getMatrix(A); 
getMatrix(B); 

のような関数を呼び出す必要がある、と述べた取り除きます。表記A[N][N]は、アレイのメンバーを意味し、Cで配列のインデックスは0

関連する問題