scanf输入输出混乱

时间:2016-06-01 11:13:58

标签: c while-loop scanf

我对我关于while循环如何工作的假设感到困惑。 我已经在我的电脑上试过了,看到所有的情况都如预期的那样, 我是对的,还是我错过了什么?

 while(scanf("%d%d%d",&a,&b,&c) ,a||b||c ) { /* some code */ }

这意味着即使一个值(a,b或c)非零,它也会循环

while(scanf("%d%d%d",&a,&b,&c) ,a&&b&&c ) {  /* some code */ }

这意味着无论何时a,b或c中的任何一个变为零,循环终止

2 个答案:

答案 0 :(得分:1)

这是正确的,第一个循环将继续,直到所有三个值都变为零,而第二个循环将在三个项目中的一个变为零时立即停止。

这是因为comma operator会丢弃第一个表达式的结果 - 基本上,表达式a || b || ca && b && c会成为您的循环条件。

请注意,当输入在读取停止组合(全零/一零)之前结束时,循环可能不会终止。当这发生时,你的循环变得无限。要防止这种情况发生,请将循环更改为

 while(scanf("%d%d%d",&a,&b,&c) == 3 && (a||b||c) ) { //some code }

 while(scanf("%d%d%d",&a,&b,&c) == 3 && a && b && c) ) { //some code }

答案 1 :(得分:0)

javax.jcr

因为javadocs以外的任何值都被视为true,因此您的第一个javax.jcr.*循环将一直执行,直到它们全部变为while(true) {//some code} // loop will run while(false) {//some code} // loop will not run 。 并且在第二个0循环中,如果它们中的任何一个变为while,则循环将不会执行。 只是基本的操作员。