2017-08-09 34 views
0

我試圖將值掃描到一個矩陣中,該矩陣通過引用傳遞給一個函數,但未編譯。 有什麼問題? 我認爲問題是在scanf行,但我不知道如何解決它。通過參考傳遞矩陣和掃描值

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

int** initMatrix(int lines, int columns) { 
    int i; 
    int** matrix; 
    matrix = (int**) calloc(lines, sizeof(int*)); 
    for (i = 0; i < lines; i++) { 
     matrix[i] = (int*) calloc(columns, sizeof(int)); 
    } 
    return matrix; 
} 

void fillMatrixValues(int*** matrixA, int lines, int columns) { 
    int i, j; 
    for (i = 0; i < lines; i++) { 
     for (j = 0; j < columns; j++) { 
      scanf("%d", matrixA[i][j]); 
     } 
    } 
} 

void printMatrix(int** matrix, int lines, int columns) { 
    int i, j; 
    for (i = 0; i < lines; i++) { 
     for (j = 0; j < columns; j++) { 
      printf("%d\t", matrix[i][j]); 
     } 
     printf("\n"); 
    } 
} 

void main() { 
    int** matrixA; 
    int lines = 2, columns = 2; 
    matrixA = initMatrix(lines, columns); 
    fillMatrixValues(&matrixA, lines, columns); 
    printMatrix(matrixA, lines, columns); 
} 
+0

至少一個問題是在這裏'空隙fillMatrixValues(INT ***矩陣matrixA,INT線,整數列)'。矩陣A應該是'int **'而不是'int ***'。 –

+1

一般檢查scanf的返回值以防止誤解。在調試實驗中,您在掃描完所有內容後立即進行打印。使用scanf可能會犯很多錯誤。簡而言之,在嘗試對結果做任何事情之前先讓您的scanf進行測試並運行。 – Yunnosch

回答

2

void main - >未定義行爲

使用

int main(void) 

int main(int argc, char ** argv) 

您應該檢查的scanf

返回值

接着問題

void fillMatrixValues(int ***matrixA, int lines, int columns) 
fillMatrixValues(&matrixA, lines, columns) 

void fillMatrixValues(int **matrixA, int lines, int columns) 
fillMatrixValues(matrixA, lines, columns) 
+0

問題解決了謝謝。 –

+0

歡迎您,很高興它有一點幫助:-) –