Компилятор продолжает повторять оператор печати - C Язык программирования - PullRequest
0 голосов
/ 24 марта 2020

Псевдокод ->

idealMarks is an integer with value 80
marksGained is an integer with value 50
Check if marksGained is greater than or equal to idealMarks
If marksGained is less than idealMarks print “Try Again”
Change marksGained equal to 80
If marksGained is greater than or equal to idealMarks print “You have scored well!” 

C Код ->

#include <stdio.h>

int main()
{
   int idealMarks; int marksGained;
   for (idealMarks = 80; marksGained = 50; marksGained == idealMarks)
   {
      printf("You have scored well!");
      marksGained = 80;
   }
   printf("Try Again");
}

Когда я выполняю этот код, он продолжает повторять оператор печати. ​​

Я использую следующий веб-сайт для выполнения моего кода - https://www.onlinegdb.com

Error Image

Ответы [ 3 ]

0 голосов
/ 24 марта 2020

Это потому, что внутри для l oop вы присваиваете значение marksGained = 50, оно должно быть условным оператором marksGained == 50.

0 голосов
/ 24 марта 2020

Формат оператора for:

for (A; B; C)
    D

В этом:

  • A выполняется первым. Обычно используется для установки начального состояния для l oop.
  • B оценивается перед каждой итерацией, чтобы проверить, продолжать ли l oop (если B оценивается как «true» »Или не ноль) или выход (если B оценивается как« ложь »или ноль).
  • C оценивается после каждой итерации. Обычно он используется для четкой корректировки состояния между итерациями l oop.
  • D - это оператор (часто составной оператор { … }), который должен быть повторен.

В вашем for l oop вместо B имеется marksGained = 50. Это выражение присваивания; это ставит 50 в marksGained. Выражение присваивания имеет значение; это значение хранится в левом операнде. Так что это B всегда имеет значение 50. Это не ноль, поэтому for l oop всегда продолжается.

У вас есть marksGained == idealMarks вместо C. Это сравнение. Он оценивается как «истина» (1), если два операнда равны, и «ложь» (0) в противном случае. Это не имеет никакого другого эффекта. Значение выражения вместо C не используется. Таким образом, этот код не влияет на вашу программу.

Не ясно, что вы намеревались написать. Я предлагаю вам писать письменно, используя только операторы if и, возможно, сначала оператор do или while вместо оператора for. Если программа работает с этими операторами, вы можете попробовать преобразовать оператор do или while в оператор for.

0 голосов
/ 24 марта 2020

Эта строка бесконечна l oop:

for (idealMarks = 80; marksGained = 50; marksGained == idealMarks)

marksGained = 50 всегда верно.

int idealMarks = 80;
for( int marksGained = 50; marksGained < idealMarks;)

Это то, что вы хотите

Редактировать : Кроме того, ваши операторы печати переключаются, попробуйте быть внутри l oop.

См. образец

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