2014-10-20 45 views
-2

我的第二条条件被忽略,不知道如何解决它。C条件被忽略时的编程

int while_counter = 0; 
int finish_flag = 0; 
while(while_counter < 100 || finish_flag != 1) 
{ 
    while_counter++; 
    finish_flag = 1; 
    printf(" finish_flag is %d \n", finish_flag); 
} 

我猜它将它解释为。对?我将如何解决这个问题?我仍然希望我的第一个条件得到尊重。

while(1) 
{ 
    while_counter++; 
    finish_flag = 1; 
    printf(" finish_flag is %d \n", finish_flag); 
} 
+7

你确定要||在这里,而不是&&? – Vality 2014-10-20 13:44:53

+2

'||'是一个短路操作符,如果左侧为真,则右侧不会被评估。 – shuttle87 2014-10-20 13:45:43

+1

你是什么意思的“忽略”? – Codor 2014-10-20 13:46:20

回答

1

您需要使用逻辑与运算符而不是逻辑或运算符。

在英语中,阅读条件while为:
while_counter < 100或finish_flag不是1,在我的身上尽一切”。

想一想。你会意识到你需要在上面的英文版本中用“和”替换“或”,这就是为什么你需要&&而不是||

在当前版本中,while中的两个条件都需要为false才能结束。您修改finish_flag,使第二个条件为false,但每次迭代一次增加while_condition
由于||表示“或”只有一个参数需要为真才能执行正文。因此,while_condition需要增加100次,第一个条件为false,这就是循环执行100次的原因。

+0

谢谢你解释:)。 – cokedude 2014-10-20 14:07:10

+0

http://ideone.com/GnTzfH使用'&&' – Baldrickk 2014-10-20 15:14:27

+0

@CoolGuy完成的工作示例:)。 – cokedude 2014-10-20 22:02:14

0

你的解释(while(1))是不正确的。 您的代码将打印“finish_flag为1”100次。如果是(1),则会永远打印“finish_flag为1”。

无法弄清楚你到底想要做什么。

while(while_counter < 100 || finish_flag != 1) 
{ 
    while_counter++; 
    finish_flag = 1; 
    printf(" finish_flag is %d \n", finish_flag); 
} 

在这里解释很多将是无用的,除非你解释你确切需要什么。