2016-12-30 3 views
-2

У меня есть программа, которая не работает из-за цикла for. Я вставив рабочий фрагмент кода здесь:Почему эта программа не дает выхода?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int numLoop = 19; 
    int counter; 
    int maxloops = 25; 
    int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 

    for (counter=1; counter==maxloops; counter++) 
    { 
     printf("%d \n", counter); 

     if (counter == numLoop) 
     { 
      break; 
     } 

     if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
     { 
      counter++; 
      continue; 
     } 
    } 

    return 0; 
} 

Ожидаемый результат: 1 2 3 4 5 6 7 8 10 11 12 13 15 16 18 19

Ничего не печатается.

+0

Вы должны собрать все предупреждения и отладочной информации ('НКУ -Wall -Wextra -g' при использовании [GCC] (http://gcc.gnu.org/) ...), улучшить свой код пока вы не получите никаких предупреждений, тогда ** используйте отладчик ** ('gdb'). Ваш цикл 'for' неверен. –

+0

Ваш вопрос * исправления-мой-код * не соответствует теме. –

+1

Покажите свои исследования/отладки. Сначала прочитайте страницу [Ask]. –

ответ

6

for Состояние контура отображается багги. Вы хотите написать counter != maxloops вместо counter==maxloops.

В противном случае условие цикла не выполняется, и тело цикла вообще не выполняется.

Тем не менее, согласно вашему требованию,

  1. вам нужно переместить контрольный блок

    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
        counter++; 
        continue; 
    } 
    

    перед темprintf() заявления, чтобы избежать безусловной печати.

  2. Условие for цикл должен действительно выглядеть

    for (counter=1; counter < numloop; counter++) 
             ^^^^^^^^^^ 
    

    , как вы хотите, чтобы вывод ограничиваться 19.

+0

Привет, я пробовал, но он, похоже, не работал –

+0

Извиняется за приведенный выше комментарий. Мой фрагмент работал с ним, но моя оригинальная программа не делала этого. Чрезвычайно жаль путаницы. –

+2

@MythicCocoa В этом случае вам необходимо создать MCVE. –

1

Возможно, вам потребуется проверить логику. Если выход должен быть не более 19 итераций. Кроме того, перед печатью счетчика необходимо проверить условие «внутреннее-если».

образец псевдо-кода, как указано ниже.

for (counter=1; counter<=numLoop; counter++) 
{ 
    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
     continue; 
    } 
printf("%d \n", counter); 

} 
1

Я хотел бы воспользоваться учебным моментом здесь. Это, по-видимому, является простым вопросом недопонимания статей в заявлении for. Оператор for - это всего лишь короткий путь для записи цикла while с инициализацией и встроенным кодом «после». Оператор for имеет три предложения в сводном списке - (init ; while ; after). Итак, давайте использовать как и пример в for заявление, в котором написано, как

for(i = 0 ; i < 10 ; i++) 
    { 
    do_something(); 
    } 

выше for цикл может быть переписан с использованием while цикла, как

i = 0; 

while(i < 10) 
    { 
    do_something(); 

    i++; 
    } 

Как вы можете видеть, for намного больше компактный.

+0

Я неправильно понял смысл второго предложения: P –

1

Buddy ur code выглядит все испорченным. понять концепцию цикла. In for loop Слушайте меня внимательно.

U Условное условие логически неверно. Петля проверяет состояние.И вы написали, что счетчик должен равняться maxloop, который никогда не будет удовлетворять в коде ur, поскольку код будет выходить из wheb, счетчик достигает значения 19 (прерывание задается, когда счетчик достигает 19). Надежда, которая решает первую часть.

Во-вторых, обратите внимание, что нарушение цикла должно происходить после отображения значений. Для ясного понимания я дал код ниже. Надеюсь, это поможет.

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int numLoop = 19; 
int counter; 
int maxloops = 25; 
int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 
for (counter = 1; counter <= maxloops; counter++) 
{ 
if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
{ 
continue; 
} 
printf("%d \n", counter); 
if (counter == numLoop) 
break; 
} 
getchar(); 
return 0; 
} 
+0

Пожалуйста, используйте правильный английский. –

+0

@BobJarvis Пожалуйста, не считайте это преступлением. Я не думаю, что это справедливая почва для обвинения. Некоторые люди не очень осведомлены на английском языке из-за их предыстории (английский не является их первым языком). Кажется, он из Индии (многие люди не очень хорошо разбираются на английском там, я говорю из личного опыта). –

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