2012-03-15 2 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; 
} 

Я не могу получить массив для печати .. Любые идеи почему? Я начинаю программист, поэтому любые слова совета ценятся.Как напечатать массив?

+0

Недостаточно ли кода? Похоже, вам не хватает открывающей скобки на массиве, а также _ в объявлении my_array –

+0

всего лишь одно из советов: вы должны указать язык, который вы кодируете, чтобы лучше определить правильное решение :) – zero

+0

О, и вы должны сообщить нам об ошибке, потому что в этом коде есть много ошибок;) –

ответ

16

Что вы делаете, это печатать значение в массиве в точке [3] [3], что является недопустимым для массива 3by3, вам нужно перебрать все пятна и распечатать их.

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

Это будет печатать в следующем формате

10 23 42 
1 654 0 
40652 22 0 

если вы хотите более точное форматирование вы должны изменить способ форматирования Printf.

+0

Если вы программируете на C++, вы также можете использовать 'cout' вместо' printf' – trev9065

+0

@ trev9065 true, но он использовал 'printf' и не имел языка, указанного, когда я отвечал, поэтому я придерживался' printf'. – twain249

+0

Спасибо, что помогло, я забыл, что мне нужно было использовать цикл для отображения всех элементов.:/ –

3

Похоже, у вас есть опечатка на массиве, следует читать:

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

Вы не имеете _ или {.

Также my_array[3][3] является недопустимым местом. Поскольку компьютеры начинаются с 0, вы открываете позицию 4. (Массивы такие странные).

Если вы хотите только последний элемент:

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

Если вы хотите, чтобы весь массив:

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

Там нет .length недвижимости в С. .length свойство может быть применено только к массивам в языках с объектно-ориентированным программированием (ООП). Свойство .length наследуется от класса объекта; класс все остальные классы & объекты наследуются на языке ООП. Кроме того, можно использовать .length-1 для возврата номера последнего индекса в массив; использование только .length вернет общую длину массива.

Я хотел бы предложить что-то вроде этого:

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

Линия (SizeOf (my_array)/SizeOf (my_array [0])) даст вам размер массива в вопрос. Свойство sizeof возвращает длину в байтах, поэтому нужно делить общий размер массива в байтах на количество байтов, составляющих каждый элемент, каждый элемент занимает 4 байта, потому что каждый элемент имеет тип int, соответственно. Массив имеет общий размер 16 байт, и каждый элемент из 4 байтов так 16/4 выходов 4 общее число элементов в массиве, так как индексация начинается с 0, а не 1.

+1

Это не сработает, если массив не является квадратным, так как 'jdex' выполняет цикл, используя размер внешнего массива, а не внутренний. – JaviMerino

1

Вы можете попробовать это:

#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; 
} 
Смежные вопросы