2012-03-15 39 views
22
int main() { 
    int my array[3][3] = 
    10, 23, 42,  
    1, 654, 0, 
    40652, 22, 0 
    }; 

    printf("%d\n", my_array[3][3]); 
    return 0; 
} 

Tôi không thể lấy mảng để in .. Mọi ý tưởng tại sao? Tôi là một lập trình viên bắt đầu nên bất kỳ lời khuyên nào đều được đánh giá cao.Làm thế nào để in mảng?

+0

Có một số mã bị thiếu không? Có vẻ như bạn đang thiếu dấu ngoặc mở trên mảng, cũng như _ trong khai báo my_array –

+0

chỉ một lời khuyên: bạn nên chỉ định ngôn ngữ bạn đang mã hóa để xác định tốt hơn giải pháp thích hợp :) – zero

+0

Oh, và bạn nên cho chúng tôi biết lỗi bạn nhận được, bởi vì có rất nhiều chỗ cho các lỗi trong mã đó;) –

Trả lời

16

Những gì bạn đang làm đang in giá trị trong mảng tại chỗ [3] [3], không hợp lệ cho mảng 3by3, bạn cần lặp lại tất cả các điểm và in chúng.

for(int i = 0; i < 3; i++) { 
    for(int j = 0; j < 3; j++) { 
     printf("%d ", array[i][j]); 
    } 
    printf("\n"); 
} 

này sẽ in nó theo định dạng sau

10 23 42 
1 654 0 
40652 22 0 

nếu bạn muốn chính xác hơn định dạng bạn sẽ phải thay đổi như thế nào printf được định dạng.

+0

Nếu bạn đang lập trình trong C++, bạn cũng có thể sử dụng 'cout' thay vì' printf' – trev9065

+0

@ trev9065 đúng nhưng anh ấy đã sử dụng 'printf' và không có ngôn ngữ được nêu khi tôi trả lời vì vậy tôi đã mắc kẹt với' printf'. – twain249

+0

Cảm ơn, điều đó đã giúp tôi quên rằng tôi cần sử dụng vòng lặp để hiển thị tất cả các phần tử ..:/ –

3

Dường như bạn có một lỗi đánh máy trên mảng của bạn, nó nên đọc:

int my_array[3][3] = {... 

Bạn không có _ hoặc {.

Ngoài ra my_array[3][3] là vị trí không hợp lệ. Vì máy tính bắt đầu đếm tại 0, bạn đang truy cập vào vị trí 4. (Mảng lạ như thế).

Nếu bạn muốn chỉ là yếu tố cuối cùng:

printf("%d\n", my_array[2][2]); 

Nếu bạn muốn toàn bộ mảng:

for(int i = 0; i < my_array.length; i++) { 
    for(int j = 0; j < my_array[i].length; j++) 
    printf("%d ", my_array[i][j]); 
    printf("\n"); 
} 
8

Không có tài sản .length trong C. Thuộc tính .length chỉ có thể được áp dụng thành các mảng trong ngôn ngữ lập trình hướng đối tượng (OOP). Thuộc tính .length được thừa kế từ lớp đối tượng; lớp tất cả các lớp khác & các đối tượng kế thừa từ trong một ngôn ngữ OOP. Ngoài ra, người ta sẽ sử dụng .length-1 để trả về số của chỉ mục cuối cùng trong một mảng; chỉ sử dụng .length sẽ trả về tổng chiều dài của mảng.

tôi sẽ đề nghị một cái gì đó như thế này:

int index; 
int jdex; 
for(index = 0; index < (sizeof(my_array)/sizeof(my_array[0])); index++){ 
    for(jdex = 0; jdex < (sizeof(my_array)/sizeof(my_array[0])); jdex++){ 
     printf("%d", my_array[index][jdex]); 
     printf("\n"); 
    } 
} 

Dòng (sizeof (my_array)/sizeof (my_array [0])) sẽ cho bạn biết kích thước của mảng trong câu hỏi. Thuộc tính sizeof sẽ trả về độ dài bằng byte, vì vậy ta phải chia tổng kích thước của mảng thành byte theo số byte tạo thành mỗi phần tử, mỗi phần tử chiếm 4 byte vì mỗi phần tử thuộc loại int tương ứng. Mảng là tổng kích thước 16 byte và mỗi phần tử là 4 byte để 16/4 sản lượng 4 tổng số phần tử trong mảng của bạn bởi vì chỉ số bắt đầu từ 0 và không 1.

+1

Điều này sẽ không hoạt động nếu mảng không vuông vì 'jdex' đang lặp bằng cách sử dụng kích thước của mảng ngoài và không phải mảng bên trong. – JaviMerino

1

Bạn có thể thử này:

#include <stdio.h> 

int main() 
{ 
    int i,j; 
    int my_array[3][3] ={10, 23, 42, 1, 654, 0, 40652, 22, 0}; 
    for(i = 0; i < 3; i++) 
    { 
     for(j = 0; j < 3; j++) 
     { 
     printf("%d ", my_array[i][j]); 
     } 
    printf("\n"); 
    } 
    return 0; 
} 
Các vấn đề liên quan