[英]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(除非它计数到返回到零为止)。
但更重要的问题是||
的使用操作员。 我最好的猜测是你的意思是上面的摘录表达了一个条件,即row
或column
等于lim1
,但这根本不是那个意思。 相反,它表示任row
非零(即真)或column=lim1
的结果非零的条件。 由于row
从 1 开始并且在内部循环中未修改,因此整个表达式将始终评估为真。
此外,C 保证如果||
的左侧操作数运算符的计算结果为真,则甚至不计算右侧的操作数(因为确定操作结果不需要它)。
您似乎想要表达的条件可以这样拼写:
((row == lim1) || (column == lim1))
内循环条件的另一半也需要类似的更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.