繁体   English   中英

一旦程序开始运行,这个循环就不会结束

[英]This loop is not ending once program starts running

一旦我的程序开始运行,它就不会在几步后停止。 谁能帮我这个?

#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;
      }
}

表格的表达

(row||column=lim1)

不要像您认为的那样表达任何意思。

首先, column=lim1部分是一个assignment ,而不是一个相等性测试。 相等测试使用==运算符。 另一方面,在 C 中,赋值是表达式(它们计算为赋值的值),因此它们可能出现为更大表达式的子表达式,如下所示。 在布尔上下文中,值零表示假,任何其他值表示真。 lim1从 1 开始并向上计数,因此它的值永远不会计算为 true(除非它计数到返回到零为止)。

但更重要的问题是||的使用操作员。 我最好的猜测是你的意思是上面的摘录表达了一个条件,即rowcolumn等于lim1 ,但这根本不是那个意思。 相反,它表示任row非零(真)或column=lim1的结果非零的条件。 由于row从 1 开始并且在内部循环中未修改,因此整个表达式将始终评估为真。

此外,C 保证如果||的左侧操作数运算符的计算结果为真,则甚至不计算右侧的操作数(因为确定操作结果不需要它)。

您似乎想要表达的条件可以这样拼写:

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

内循环条件的另一半也需要类似的更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM