2013-04-11 30 views
2

我在C二維數組是這樣的:C:印刷全行多維數組

int pop[18000][3] = { 
    0, 1, 24, 
    0, 2, 46, 
    /* many other rows */ 
    6, 17999, 10, 
    6, 18000, 10, 
}; 

我想要做的就是寫檢查每一行的最後一個值的函數和,如果它有一定的值,則返回整行。我知道我可以做到這混亂的方式

for (i = 0; i <= 2; i++) 
    if (pop[i][1] == 10) 
    printf("%d, %d, %d\n", pop[i][0], pop[i][1], pop[i][2]); 

但我實際上是尋找一個更通用的解決方案,可以讓我打印選定整個行(如,在某些模擬,我可能最終產生的2-具有幾十個如果不是數百列的二維數組;我不希望使用凌亂的方法)。

回答

2
for(i=0;i<18000;i++) 
{ 

if(pop[i][2] == 10) // u sed last column 
for(j=0;j<3;j++) 
     printf("%d",pop[i][j]); 
} 

推薦?

+0

我目前尷尬了地獄,這沒有發生對我說:/ – Koldito 2013-04-11 14:16:41

+0

:)發生的情況:d當我們沉迷於複雜的代碼很多 – 2013-04-11 14:17:18

0

使用一個輔助功能:

void printArray(int *array, int length) { 
    for (int i = 0; i < length; ++i) { 
     printf("%d", array[i]); 
    } 

    printf("\n"); 
} 

用法:

for (i = 0; i < ROWS_COUNT; i++) 
    if (pop[i][COLUMNS_COUNT - 1] == 10) 
    printArray(pop[i], COLUMNS_COUNT); 
0

我將分配長度rows*columns的一維陣列,並使用下面的函數:

void print(int *pop, int index, int value, int rows, int columns) { 

    int i,j; 

    for(i=0; i<rows; i++) { 
     if(pop[i+(j-1)*index] == value) { 
      for(j=0; j<columns; j++) { 
       printf("%d, ", pop[i+j*columns]); 
      } 
      printf("\n"); 
     } 
    } 
} 

當您只需將該數組作爲參數傳遞給函數即可調用行數和列數它有和您想檢查價值value的列號index。這樣,您就可以使用該功能對任何二維數組的任意列數和值

// ... 

int rows = 18000; 
int columns = 3; 
int index = 3; 
int value = 10; 
int *pop = malloc(sizeof(int)*rows*columns); 

// Fill your pop array here 

print(pop, index, value, rows, columns); 

// ...