C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) 平台无关 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) 环境无关 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) 问题(Question): 如何在不增加宣告变数和使用跳跃的情况下 写出语意等价但是不会重复判断的程式码(见下) 喂入的资料(Input):预期的正确结果(Expected Output): 保持语意等价 错误结果(Wrong Output):程式码(Code):(请善用置底文网页, 记得排版) 1: while (1) 2: { 3: while (!a() && b()) 4: c(); // c() may affect a() and b() 5: 6: if (a()) 7: break; 8: 9: // remaining code section 0: } 流程图大概是这样子 www https://i.imgur.com/DBNP7ts.jpg 补充说明(Supplement): 由於有点洁癖的缘故 觉得相同的函数 a() 需要触发两次很碍眼(灿笑 而且 if (a()) 中的 a() 必定为真 若且唯若 while (!a() && b()) 的 a() 必定为真 平常都可以改一下控制的逻辑 达到至少我满意的程度(? 不知道存不存在控制流程可以解决我的困扰 >皿< --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.185.23
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1517219373.A.533.html
1F:推 sunev: 那你的 "c() only affects a()" 不会改变a()吗? 01/29 17:51
我觉得 c() 不论有没有影响 b() 应该不会影响控制的流程(? 实际上 在我的程式码里 c() 是会影响 b() 的 但是我希望能简化问题 每次迭代的时候都会触发 c() 使得 !a() 可能突然变成假而退出第三行的 while 在这样的情况 下一行的 break 一定会发生而退出第一行的 while 但是如果是在 b() 为假的情况下退出的话 下一行的 break 就一定不会发生 OAO 简短来说 我希望在第三行 while 发生 short circuit evaluation 的时候 直接跳出第一行的 while 不想再多一次已知结果的判断
2F:推 sunev: while(!a()){while(b()){c();}} ? 01/29 18:10
这样 c() 可能会做过头 XD 要同时 !a() 且 b() 都为真的时候才能做 c()
3F:推 AstralBrain: 不call c()的话a()和b()就不会变吗 01/29 18:11
是的 不是 multi-threading www
4F:推 AstralBrain: while (!a()) { if (b()) c(); } ? 我想的是这样01/29 18:13
这样好像也不太对 XD
5F:推 AstralBrain: 先确认一下01/29 18:30
6F:→ AstralBrain: a=true => break, (a,b)=(false,true) => call c01/29 18:31
7F:→ AstralBrain: (a,b)=(false,false) => loop 这会卡死?01/29 18:31
8F:→ AstralBrain: 我有理解错吗01/29 18:31
对的 只是不会发生 loop 这麽惨的情况 XD 时序上 a() 一开始都是 false b() 则是有时真有时假
9F:推 ckc1ark: 还有remaining code section可以动a()和b()吧01/29 18:33
下面的 code section 都没有 a() 跟 b()
10F:推 ckc1ark: while(!a()){if(b()){c();}else{//remain..}} 这样等价吧01/29 18:47
哈哈哈 你的好像是第一个对的...XD
11F:→ MOONRAKER: too hard01/29 18:47
12F:推 AstralBrain: 看起来b()根本可以假设永远是true01/29 18:49
13F:→ AstralBrain: 一变false就再也没机会call到c了 不要看它比较好 XD01/29 18:50
14F:推 AstralBrain: while(!a()){c();remain...} 就可以01/29 18:53
15F:→ AstralBrain: 如果b有side-effect再随便找个地方放01/29 18:54
已经补上流程图 QQ 不能假设 b() 永远是对的
16F:推 ckc1ark: 我刚问的是remaining code会不会影响之後a()和b()的结果01/29 18:58
会 而且一定会 OAO
17F:推 LPH66: 这样就 while(!a()){if(b()) c(); else d();} 01/29 19:11
18F:→ LPH66: 你把你的流程图调一下就可以看到这个结构 01/29 19:12
好像真的是这样 THX >皿<
19F:推 chuegou: 怒goto 01/29 19:45
感谢各位 QQ while (!a()) { if (b()) c(); else { //remain } } 是对的没错!! 好感动呜呜呜 谢谢你们 wwwww
20F:推 nova06091: 我都念 肯辍flow 01/30 20:45
21F:→ nova06091: 耻ずかしいね 01/30 20:46
22F:→ hunandy14: えぇっ! 现在才发现原来是 耻ずかしいね 02/01 21:11
ばれたか!!! 耻ずかしい www ※ 编辑: Hazukashiine (122.116.185.23), 02/01/2018 22:29:23







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP