Это l oop не заканчивается после запуска программы - PullRequest
0 голосов
/ 29 февраля 2020

Как только моя программа запускается, она не останавливается после нескольких шагов. Кто-нибудь может мне помочь с этим?

#include <stdio.h>
void main()
{
   int n,row,column,lim1,lim2,k;
   scanf("%d",&n);
   lim2=(2*n)-1;
   lim1=1;
   k=n;
   for(row=1,column=1;row<=lim2,column<=lim2;row++,column++)
      while((row||column=lim1)||(row||column=lim2))
      { printf("%d",k);
        n--;
        lim1=lim1+1;
      }
}

1 Ответ

1 голос
/ 29 февраля 2020

Выражения вида

(row||column=lim1)

не означают ничего похожего на то, что, как вы думаете, они означают.

Во-первых, column=lim1 часть является присваиванием , а не проверкой на равенство. В тестах на равенство используется оператор ==. С другой стороны, в C присваивания являются выражениями (они оцениваются по присвоенному значению), поэтому они могут отображаться как подвыражения больших выражений, как здесь. В логическом контексте значение ноль представляет ложь, а любое другое значение представляет истину. lim1 начинается с 1 и отсчитывается, поэтому его значение никогда не оценивается как истинное (если оно не рассчитывает до тех пор, пока не вернется к нулю).

Но более существенной проблемой является использование || оператор. Мое лучшее предположение состоит в том, что вы имеете в виду вышеприведенный отрывок для express условие, которое либо row, либо column равно lim1, но это вовсе не означает. Вместо этого он выражает условие, что либо row не равен нулю ( т.е. true), либо результат column=lim1 не равен нулю. Поскольку row начинается с 1 и не изменяется во внутреннем l oop, это общее выражение всегда будет иметь значение true.

Более того, C гарантирует, что если левый операнд * Оператор 1026 * оценивается как true, тогда правый операнд даже не оценивается (поскольку это не требуется для определения результата операции).

Условие, которое, как вам кажется, нужно express, может пишется так:

((row == lim1) || (column == lim1))

Подобные изменения необходимы в другой половине внутреннего состояния l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...