看板 C_and_CPP 關於我們 聯絡資訊
問題: 在一陣列中存入6個字元密碼(字母或數字),使用者從鍵盤輸入密碼, 要第1個字對才能輸入第2個,以此類推直到6個輸入完成, 每個字只能有三次輸入機會。 程式://二維陣列找最大(小)值 #include<stdio.h> #include<conio.h> void func(char, char); int flag=0; #define SIZE 6 main() { char array[SIZE]={'a','9','5','g','u','q'}; char serach; int i=0; for (i=1;i<SIZE;i++) { printf("請輸入第%d組密碼\n",i+1); scanf("%c",&serach); printf("\n"); func(serach, array[i]); printf("下一組密碼:\n"); } //////////////////////////////////////// void func(char ser,char arr) { if (ser==arr) return ; else { flag++; printf("錯誤!再次輸入密碼:\n"); scanf("%c",&ser); if (flag>2) { printf("次數太多\n"); break; } func(char ser,char arr); //感覺是這行錯 } } 但不知錯在哪裡,試了好久,感覺是 func(char ser,char arr);有誤 請各位高手指教一下 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.16.61
jacky1989:沒看過這種用法,感覺是呼叫函數阿!!可是怎麼會有type呢 04/17 21:59
TsinTa:他的確是呼叫函數,而且多打了type才會錯的... 04/17 22:00
flydragon198:以前老師有說過這樣的密碼檢驗設計不好,很快被猜出 04/17 22:02
jacky1989:應該全部一起輸入再逐字比對比較好吧?! 04/17 22:03
james732:我以為這隻程式應該會像這樣 http://pastie.org/1803782 04/17 22:05
VictorTom:錯誤是什麼錯誤?? 結果不對?? 還是編譯有錯?? 還是執行 04/17 22:05
VictorTom:到一半當掉?? (小弟我覺得越來越常問"錯誤"為何了~_~) 04/17 22:05
VictorTom:另外, C語言的陣列索引從0開始, 你這樣驗證密碼的話, 會 04/17 22:06
VictorTom:始終差一個字. 即你拿user第0字與答案第1字相比, 使用者 04/17 22:07
VictorTom:打對了你也認不出來, 還有潛在的記憶體存取錯誤風險. 04/17 22:07
VictorTom:另外你//的那行是有問題, 把兩個char都去掉.... 04/17 22:09
VictorTom:又, 你的flag不在猜對的時候reset的話, 你是全部只有三 04/17 22:09
VictorTom:次機會, 不是每個字都有三次機會能用喔@_@" 04/17 22:09
james732:我漏掉可以猜三次了 XD 更正 http://pastie.org/1803800 04/17 22:13
firejox:樓上 為什麼我看到問號了? 04/17 22:16
james732:我想提示就好,剩下的留給原po去想 04/17 22:16
firejox:哦哦 我在想為什麼要用遞迴做? 04/17 22:20
james732:咦,不是題目要求的嗎 XD 04/17 22:21
firejox:恩...對 但他有些沒有return到 04/17 22:22
firejox:沒有迴圈還用break... 04/17 22:24
firejox:在讀入輸出也很奇怪 04/17 22:25
firejox:而且實際遞迴只有一次機會 照他的寫法 04/17 22:29
lbeeon:新手發問:block中的flag在下次遞回時不會重新初始? 04/18 01:44
purpose:不會,因為 int flag = 0; 寫在遞迴函數主體外面。 04/18 01:46