看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《totoron10 (totoron)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : 習題:請撰寫一程式來隨機產生6個號碼(1-49) : ---------------------------------------- : 以下是程式碼: : #include <stdio.h> : #include <stdlib.h> : #define randomize() srand((unsigned) time(NULL)) : #define random(x) (rand() % (x)) : int main : { : int loto[6],count=0,i; : int flag; : randomize(); : while(count<6){ : flag=0; : loto[count]=random(49)+1; : for(i=0;i<=count;i++) : if(loto[count]==loto[i]) : flag=1; : if(flag!=0) : count++; 來小小推一下過程 :P count: 0 (進去while) flag : 0 loto[0] = 38 ((0~48)+1) for(i=0;i<=0;i++) // count=0 時, i只會跑0. count=1 時, i會跑0跟1. if(loto[0]==loto[i]) // 第count次的loto值 是否等於 第i次的loto值 flag: 1 // 是的話 flag 設為1 (是找到或是沒找到的意思?) if(flag!=0) // 從這個 if 來看, flag 為1時, 應該是找到 count: 1 // 新的loto值, 所以 count要加1, 好讓下一輪 // 的亂數值可以放在正確的儲存格裡. count < 6 (再進去while) flag: 0 loto[1] = 38 (又這麼剛好跑到38) for(i=0;i<=1;i++) i:0 i:1 if(loto[1]==loto[i]) Yes Yes flag: 1 flag為1 flag為1 推到有點心虛... 反正, for-loop 裡的 i, 一定會跑到 i=count 的情況, 所以 for-loop 一定會遇到 loto[count] 等於 loto[i], 使得 flag 變成1. 所以, 不要說原PO不知道 flag 在做什麼. 我也不知道. XDDD 這個for-loop是寫好玩的嘛? 自己慢慢想流程, 慢慢拼出片段的程式, 還比啃下這個不知所云的程式碼好太多. 你遇到的問題, 我都遇過. 而且我還會問更白痴的問題呢! 別怕寫程式, 只要你腦袋裡的想法清楚了. 再配上適當的指令, 就可以寫出來了. : } : for(i=0;i<count;i++) : printf("\n第%d 個樂透號碼:%d",i+1,loto[i]); : printf("\n") : system("PAUSE"); : return 0; : } : -------------------------------------------------------------------- : 1.想請問一下當中flag在程式中的用意是? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.183.236
firejox:我很懷疑這份code可以跑出預期的東西... 07/29 22:21
stonehomelaa:所以我才說原po找個可靠點的同學罩XD 07/29 22:22
ericinttu:看他的做法與邏輯嘛.... 我是用人腦compiler推的.有錯請 07/29 22:23
ericinttu:打小力一點. 07/29 22:23
angleevil:我當年是初學者時,我總是po超級難看的code.發問的邏輯 07/29 22:27
angleevil:一講不清楚就沒人理我.只是有時候會發現比我過分的人更 07/29 22:28
angleevil:多.寫程式的確是不好玩,但是大部分的人在意"誠意" 07/29 22:29
ericinttu:當我小的時候,有問題還不知道怎麼問,只好慢慢一行trace 07/29 22:31
firejox:我也是一行行trace的(舉手) 07/29 22:46
firejox:有一個bug 要用time(NULL) 需要time.h 07/29 22:59
angleevil:我是一行行trace,如果還找不出原因,就去問學長 07/29 23:11
angleevil:學長懶得理我,就去求網路. 07/29 23:12