2015-06-02 2 views
-1

Я начинаю программирование с языка C, создавая несколько простых программ, но у меня возникают проблемы с конкретным кодом. Программа должна создать массив из 3 элементов, получить вход от пользователя и в зависимости от ввода изменить некоторые элементы массива. Но я не знаю, почему код перескакивает первый цикл for.
Вот кусок кода:Невозможно изменить массив в цикле

int lock[3] = {3, 3, 3}, moves; 
char move; 

while (1) 
{ 
    scanf("%c", &move); 

    if (move == 'r' || move == 'R') 
    { 
     for (int i = 1; i == 2; i++) 
     { 
      lock[i]++; 
      if (lock[i] == 4) lock[i] = lock[i] % 3; 
     } 

     printf("Lock :"); 
     for (int j = 0; j < 3; j++) 
     { 
      if (j == 2) printf(" %d.\n", lock[2]); 
      else printf(" %d,", lock[j]); 
     } 

     moves++; 
    } 
} 

Выход из него является

Lock : 3, 3, 3. 

Но он должен вернуть

Lock : 3, 1, 1. 

Может кто-нибудь сказать мне, что происходит?

ответ

4

Этот цикл никогда не выполняет:

for (int i = 1; i == 2; i++) 

Значение i начинается 1, но условие для продолжения контура является i == 2, который оценивается как ложное.

1
for (int i = 1; i <= 2; i++) 
+3

Пожалуйста, избегите кода только ответы – P0W

1

== это ваш оператор равенства, поэтому он проверяет, равен ли i равен 2 в начале цикла. Но когда вы пишете

for(i=1;i==2;i++) 

i инициализирован 1, и поэтому i == 2 является ложным. Таким образом, цикл никогда не executes.Try этот код:

for(i=1;i<3;i++) 

Он не проверяет, является ли я меньше 3 так, когда я = 1 и я = 2 excecutes петля успешно.

0

Если вы хотите, чтобы Ваш цикл, чтобы быть исполняемым вы должны изменить

тестовое условие i==2 либо i<=2 или i<3. Ваша проблема будет решена.

i==2 будет оценивать ложь, как значение I инициализируется с 1

0

В своем первом for цикле, условие i==2 оценивается как ложное, так как значение i равно 1. Следовательно, первый for цикл пропускается.

Вы должны изменить его на for(int i=1; i<=2; i++) или for(int i=1; i<2; i++) согласно вашим требованиям.

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