[问题] 请问我这个程式能用循环做吗?

楼主: IOP14759 (iop14759)   2020-03-27 14:01:38
开发平台(Platform): (Ex: Win10, Linux, ...)
WIN8
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
c++builder
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
想请教此程式如果想写成循环该怎么写?
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
int pcs,ID,count;
AnsiString bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,ID_display;
//将ID转为2进制的字串
bit1=(ID&0x02)>>1;
bit2=(ID&0x04)>>2;
bit3=(ID&0x08)>>3;
bit4=(ID&0x10)>>4;
bit5=(ID&0x20)>>5;
bit6=(ID&0x40)>>6;
bit7=(ID&0x80)>>7;
//////////////////////////////////////////////////////////////////
if(pcs==1)ID_display=bit7;
if(pcs==2)ID_display=bit7+bit6;
if(pcs==3)ID_display=bit7+bit6+bit5;
if(pcs==4)ID_display=bit7+bit6+bit5+bit4;
if(pcs==5)ID_display=bit7+bit6+bit5+bit4+bit3;
if(pcs==6)ID_display=bit7+bit6+bit5+bit4+bit3+bit2;
if(pcs==7)ID_display=bit7+bit6+bit5+bit4+bit3+bit2+bit1; //最多7个
/////////////////////////////////////////////////////////////////
if(count==3){Form1->Label31->Caption=ID_display;} //第三栏id
if(count==2){Form1->Label19->Caption=ID_display;} //第二栏 id
if(count==1){Form1->Label1->Caption=ID_display;} //第一栏id
//////////////////////////////////////////////////////////////////
补充说明(Supplement):
这是小弟的最近写的,每次读1~7个ID,每个ID随机为1或0
我是用字串+字串的方式来显示每个ID分别是1或0
因为暂时没有需要太多次循环所以用笨方法一个个判断
但是自己知道这方法很笨,如果以后要读更多ID我就无解了
作者: a16450 (a16450)   2020-03-27 14:53:00
结构+switch就可以了
楼主: IOP14759 (iop14759)   2020-03-27 15:10:00
是switch...case吗?
作者: Schottky (顺风相送)   2020-03-27 16:41:00
每个 ID?我只看到一个 ID麻烦你用白话文说明一下程式在干嘛,输入是啥输出该是啥不要叫人看着残缺不全的程式码自己猜
作者: k1400 (德州家康)   2020-03-27 21:41:00
pcs用作循环次数如何原po的意思应该是目前判断8-bit,未来可能16-bit,照目前的写法会越写越长
作者: zoo868e (zoo)   2020-03-27 22:24:00
http://i.imgur.com/x0QojEm.jpg这样 不需要for 有更好的写法 给原po参考
作者: k1400 (德州家康)   2020-03-27 22:43:00
while(pcs- -){display += bits ++}id 放到 bits 你设计一下
作者: Lipraxde (Lipraxde)   2020-03-27 23:17:00
查表法属于稀有技能了吗?
作者: joe820730 (Let it go)   2020-03-28 02:58:00
看不懂你的程式要干嘛,但字串处理的部分我会这样写:https://ideone.com/HYh8ou
作者: easypro   2020-03-28 13:37:00
bit 宣告成阵列,用循环组就可以了,转字串部分只要先做>>再做&1+0x30即可得到该bit ASCII , 接下来用for. 做--取bit 阵列最大开始接续就能要你的组合了。
作者: krscent (...)   2020-03-28 14:16:00
我记得BCB有IntToBin, 然后再做SubString就好了~
作者: aiwhat   2020-03-28 18:05:00
IntToStr(ID >> (8-i) & 0x1) 1 <= i <= pcs
作者: poyenc (发箍)   2020-03-29 05:53:00
std::bitset 可以做到你要的功能 https://bit.ly/2UMnn2zindexing 写错 :p https://bit.ly/2wNhGJJ (C++17)
作者: KevinR (Kevin)   2020-04-06 19:58:00
看起来怎么那么像 verilog

Links booklink

Contact Us: admin [ a t ] ucptt.com