[問題] 遞迴問題(密碼輸入)

看板C_and_CPP (C/C++)作者 (好時光)時間15年前 (2011/04/17 21:45), 編輯推噓3(3021)
留言24則, 8人參與, 最新討論串1/1
問題: 在一陣列中存入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

04/17 21:59, , 1F
沒看過這種用法,感覺是呼叫函數阿!!可是怎麼會有type呢
04/17 21:59, 1F

04/17 22:00, , 2F
他的確是呼叫函數,而且多打了type才會錯的...
04/17 22:00, 2F

04/17 22:02, , 3F
以前老師有說過這樣的密碼檢驗設計不好,很快被猜出
04/17 22:02, 3F

04/17 22:03, , 4F
應該全部一起輸入再逐字比對比較好吧?!
04/17 22:03, 4F

04/17 22:05, , 5F
我以為這隻程式應該會像這樣 http://pastie.org/1803782
04/17 22:05, 5F

04/17 22:05, , 6F
錯誤是什麼錯誤?? 結果不對?? 還是編譯有錯?? 還是執行
04/17 22:05, 6F

04/17 22:05, , 7F
到一半當掉?? (小弟我覺得越來越常問"錯誤"為何了~_~)
04/17 22:05, 7F

04/17 22:06, , 8F
另外, C語言的陣列索引從0開始, 你這樣驗證密碼的話, 會
04/17 22:06, 8F

04/17 22:07, , 9F
始終差一個字. 即你拿user第0字與答案第1字相比, 使用者
04/17 22:07, 9F

04/17 22:07, , 10F
打對了你也認不出來, 還有潛在的記憶體存取錯誤風險.
04/17 22:07, 10F

04/17 22:09, , 11F
另外你//的那行是有問題, 把兩個char都去掉....
04/17 22:09, 11F

04/17 22:09, , 12F
又, 你的flag不在猜對的時候reset的話, 你是全部只有三
04/17 22:09, 12F

04/17 22:09, , 13F
次機會, 不是每個字都有三次機會能用喔@_@"
04/17 22:09, 13F

04/17 22:13, , 14F
我漏掉可以猜三次了 XD 更正 http://pastie.org/1803800
04/17 22:13, 14F

04/17 22:16, , 15F
樓上 為什麼我看到問號了?
04/17 22:16, 15F

04/17 22:16, , 16F
我想提示就好,剩下的留給原po去想
04/17 22:16, 16F

04/17 22:20, , 17F
哦哦 我在想為什麼要用遞迴做?
04/17 22:20, 17F

04/17 22:21, , 18F
咦,不是題目要求的嗎 XD
04/17 22:21, 18F

04/17 22:22, , 19F
恩...對 但他有些沒有return到
04/17 22:22, 19F

04/17 22:24, , 20F
沒有迴圈還用break...
04/17 22:24, 20F

04/17 22:25, , 21F
在讀入輸出也很奇怪
04/17 22:25, 21F

04/17 22:29, , 22F
而且實際遞迴只有一次機會 照他的寫法
04/17 22:29, 22F

04/18 01:44, , 23F
新手發問:block中的flag在下次遞回時不會重新初始?
04/18 01:44, 23F

04/18 01:46, , 24F
不會,因為 int flag = 0; 寫在遞迴函數主體外面。
04/18 01:46, 24F
文章代碼(AID): #1Dgkxrag (C_and_CPP)
文章代碼(AID): #1Dgkxrag (C_and_CPP)