我对 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 中的任何一个变为零,循环就会终止
最佳答案
这是正确的,第一个循环将继续进行,直到所有三个值都变为零,而第二个循环将在三个项目中的一个变为零时立即停止。
这是因为comma operator丢弃第一个表达式的结果 - 本质上,表达式 a || b || c
或 a && 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 }
关于c - scanf 输入输出混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567045/