2013-05-17 7 views
0

Я объявил массив «a [3] [3]» (3 x 3), и пользователь должен заполнить его целыми числами.Заполнение двумерного массива в C

Я использую этот код:

for (i = 0; i < 3; i++) 
{ 
    for (j = 0; j < 3; i++) 
     scanf("%d", &a[i][j]); 
} 

После того как я номерируются 0 1 2 3 4 5 6 7 8 и попытаться напечатать это он выводит: 0 0 0 1 0 0 2 0 0

Что такое проблема?

+0

Шаг инкремента во втором 'for' означает' i', когда он должен быть 'j', поэтому код имеет бесконечный цикл. Это фактический код (т. Е. Где «попытка печати»)? – hmjd

+0

Я смотрю на это в течение 2 минут и не заметил этого: D – Maroun

+0

@Arlind Вы знаете, как использовать отладчик? Если нет, см. Этот учебник - http://www.youtube.com/watch?v=GPnTiFxkn9Y – sashoalm

ответ

6

В вашей внутренней для

for (j = 0; j < 3; i++) 

приращение должно быть j ++;

for (i = 0; i < 3; i++) 
{ 
    for (j = 0; j < 3; /*HERE */j++) 
     scanf("%d", &a[i][j]); 
} 

Используйте отладчик идти шаг за шагом и видеть значение переменного, чтобы расследовать такие случаи, по своему усмотрению и в будущем.

+0

Спасибо большое! Я ненавижу это, когда со мной происходит такая ошибка. Впустую 40 минут на этом :) – Arlind

+3

@Arlind Вы не будете тратить 40 минут при использовании отладчика. – Maroun

1

Вы увеличиваете неверную переменную во внутреннем цикле.

for (i = 0; i < 3; i++) 
{ 
    for (j = 0; j < 3; j++)  // < should be j++, not i++ 
     scanf("%d", &a[i][j]); 
} 
1

В коде:

for (i = 0; i < 3; i++) 
{ 
    for (j = 0; j < 3; i++) 
     scanf("%d", &a[i][j]); 
} 

Второй i++ должен быть j++, в противном случае программа никогда не перестанет просить номера.

Этот вопрос довольно прост, почему бы не поделиться всем, что у вас есть. Я уверен, что есть только ошибки sytax.

Смежные вопросы