编译器不断重复打印语句 - C 语言编程

Compiler keeps on repeating a print statement - C Programming Language

伪代码 ->

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

这一行是一个死循环:

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

marksGained = 50 总是正确的。

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

是你想要的

编辑: 还有你的print语句被切换了,try应该在循环里面。

sample

这是因为在 for 循环 中你将值赋给 marksGained = 50 ,它应该是一个条件语句 marksGained == 50.

for 语句的格式为:

for (A; B; C)
    D

在此:

  • A 先执行。它通常用于设置循环的初始状态。
  • B 在每次迭代之前进行评估,以测试是继续循环(如果 B 评估为“真”或非零)还是退出(如果 B 评估为“假”或零)。
  • C 在每次迭代后计算。它通常用于根据循环的迭代以清晰的方式调整之间的状态。
  • D是要迭代的语句(通常是复合语句{ … })。

在您的 for 循环中,您用 marksGained = 50 代替了 B。那是一个赋值表达式;它将 50 放入 marksGained。赋值表达式有一个值;它是存储在左操作数中的值。所以这个 B 总是有值 50。那是非零的,所以 for 循环总是继续。

您用 marksGained == idealMarks 代替了 C。那是一个比较。如果两个操作数相等,它的计算结果为“真”(1),否则为“假”(0)。它没有其他作用。不使用 C 处的表达式值。所以这段代码对你的程序没有影响。

不清楚你打算写什么。我建议你一开始只使用 if 语句和 dowhile 语句而不是 for 语句来写作。如果您让程序使用这些语句,那么您可以尝试将 dowhile 语句转换为 for 语句。