[問題] 請問我這個程式能用迴圈做嗎?

作者: 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