关于while循环条件判断顺序

auroralorigin 2018-03-14 03:21:28
while ((clock() - start) < 3000 && (judge = _kbhit()) == 0);

像这个循环语句,是先判断(clock() - start) < 3000还是(judge = _kbhit()) == 0呢??
...全文
1294 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlbertS 2018-03-16
  • 打赏
  • 举报
回复
这个是逻辑运算的知识,&&是短路与,也就是说会先判断前面的表达式,如果为真,再判断后面的表达式,如果前面的表达式为假,那么后面的表达式就不会判断了 所以是先判断(clock() - start) < 3000)
赵4老师 2018-03-15
  • 打赏
  • 举报
回复 1
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
while (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。
Acuity. 2018-03-14
  • 打赏
  • 举报
回复
注意运算符顺序,从左到右
  • 打赏
  • 举报
回复
&&是先判断左边的表达式
幻夢之葉 2018-03-14
  • 打赏
  • 举报
回复
&& , || 和,(逗号运算符)三个运算符标准规定计算顺序从左至右! 而其他运算符的子表达式的求解顺序未定义
paschen 版主 2018-03-14
  • 打赏
  • 举报
回复
先判断(clock() - start) < 3000,如果为真才会判断后面那个
自信男孩 2018-03-14
  • 打赏
  • 举报
回复
当然先判断(clock() - start) < 3000了,如果这个表达式为假,那么(judge = _kbhit()) == 0表达式就不会判断了。自然也不会计算_kbhit()了。 &&运算符,是当前一个表达式为真时,后面的表达式才会继续判断。因为知乎两个表达式都为真才会进入while的循环体。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧