[語法] 簡單到爆炸~scanf的問題

看板C_and_CPP作者 (OT15的米男)時間13年前 (2010/11/17 17:33), 編輯推噓5(5041)
留言46則, 9人參與, 最新討論串1/1
預設密碼:1234 使用者有三次機會 輸入正確顯示"密碼正確" 輸入錯誤顯示"密碼錯誤" 我的問題是:為何我的程式有以下兩個問題? 1.第一次輸1234=>"密碼正確" 但是 第二次輸1234=> "密碼錯誤" 2.第一次輸入錯誤 => "密碼錯誤" 但是 第二次 輸1234 還是=> "密碼錯誤" 到底哪裡錯了? 請先不要管我用甚麼方式寫(我知道有更好的寫法~我只是想知道錯在哪~) 我用dev-c++ 寫的 謝謝!! ----------------------以下為程式碼----------------------- #include "stdio.h" #include <stdlib.h> #define a '1' #define b '2' #define c '3' #define d '4' int main(int argc, char *argv[]) { char aa,bb,cc,dd; int i=3; while(i!=0) { printf("請輸入密碼(四個數字)\n"); scanf("%c%c%c%c",&aa,&bb,&cc,&dd); if(a==aa&&b==bb&&c==cc&&d==dd) //"=="是C的"= =" { printf("密碼正確\n"); } else { printf("密碼錯誤\n"); } i--; } system("pause"); return 0; } ------------------------------------以上為程式碼------------------ 謝謝!! -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.128.108

11/17 17:35, , 1F
提示: printf("%c%c%c%c", aa, bb, cc, dd);
11/17 17:35, 1F

11/17 17:36, , 2F
先把變數內容印出來看看:)
11/17 17:36, 2F

11/17 17:36, , 3F
把變數內容印出來?~~怎麼印?教一下
11/17 17:36, 3F

11/17 17:37, , 4F
他好像教你了阿…
11/17 17:37, 4F

11/17 17:37, , 5F
喔~我懂你意
11/17 17:37, 5F

11/17 17:38, , 6F
是要放哪裡?
11/17 17:38, 6F

11/17 17:39, , 7F
你要考慮到scnaf吃完後還有留一個'\n'在外面,所以下一個aa
11/17 17:39, 7F

11/17 17:39, , 8F
第二次我輸入~再印出變數~變成只剩123
11/17 17:39, 8F

11/17 17:40, , 9F
的值是'\n' bb是 '1' ...
11/17 17:40, 9F

11/17 17:40, , 10F
當然,printf很忠實的將aa你面存的'\n'字原印出來了
11/17 17:40, 10F

11/17 17:40, , 11F
喔~
11/17 17:40, 11F

11/17 17:41, , 12F
等一下~
11/17 17:41, 12F

11/17 17:42, , 13F
那怎麼解決???
11/17 17:42, 13F

11/17 17:43, , 14F
爬文,注意板規1
11/17 17:43, 14F

11/17 17:43, , 15F
可以看這篇文章:#1ClllYUd (C_and_CPP)
11/17 17:43, 15F

11/17 17:44, , 16F
去哪找這篇?
11/17 17:44, 16F

11/17 17:45, , 17F
to J老大~~文章哪裡找?
11/17 17:45, 17F

11/17 17:45, , 18F
在本板文章列表貼上 #1ClllYUd 這串字
11/17 17:45, 18F

11/17 17:46, , 19F
http://nopaste.csie.org/6c7e2 也可以用字串來解決問題
11/17 17:46, 19F

11/17 17:46, , 20F
順帶一提,我覺得你 i-- 放的位置怪怪的,仔細想一下你的程
11/17 17:46, 20F

11/17 17:46, , 21F
式邏輯
11/17 17:46, 21F

11/17 17:48, , 22F
to J ~你是說按"/"輸入"#1ClllYUd"??~~沒東西啊?!
11/17 17:48, 22F

11/17 17:49, , 23F
不必按/,直接貼上就好
11/17 17:49, 23F

11/17 17:50, , 24F
11/17 17:50, 24F

11/17 17:51, , 25F
to xat 你覺得哪裡怪?
11/17 17:51, 25F

11/17 17:53, , 26F
不是應該猜錯才要 i-- //減少猜密碼的次數
11/17 17:53, 26F

11/17 17:53, , 27F
難不成你沒看我的code ?
11/17 17:53, 27F

11/17 17:54, , 28F
^到
11/17 17:54, 28F

11/17 17:55, , 29F
事啦~但是我故意的~想要第二次輸入後1234~仍出現正確
11/17 17:55, 29F

11/17 17:55, , 30F
但是沒辦法ㄋㄟ
11/17 17:55, 30F

11/17 17:56, , 31F
scanf("%c%c%c%c%*c",&a,&b,&c,&d); 第一次輸入會留下
11/17 17:56, 31F

11/17 17:57, , 32F
'\n', 所以第二次輸入的時候會選讀到 '\n', 可以用
11/17 17:57, 32F

11/17 17:57, , 33F
%*c 把多餘的 '\n' 讀走.or while(getchar()!='\n');
11/17 17:57, 33F

11/17 17:59, , 34F
思考中
11/17 17:59, 34F

11/17 18:00, , 35F
to tro 你是故意多打一個 %c ??
11/17 18:00, 35F

11/17 18:00, , 36F
喔~看懂~思考中
11/17 18:00, 36F

11/17 18:00, , 37F
%c跟%*c不一樣
11/17 18:00, 37F

11/17 18:02, , 38F
!!!!!!!!OK了~
11/17 18:02, 38F

11/17 18:02, , 39F
但是
11/17 18:02, 39F

11/17 18:03, , 40F
%*c是啥意思??
11/17 18:03, 40F

11/17 18:06, , 41F
謝謝所有參與討論的人~~感激~
11/17 18:06, 41F

11/17 18:10, , 42F

11/17 21:20, , 43F
請改標題 這標題太沒有意義了
11/17 21:20, 43F

11/17 21:26, , 44F
scanf("%c")也行吧?
11/17 21:26, 44F

11/17 22:12, , 45F
可以,要多一個變數讀走而已.
11/17 22:12, 45F

11/20 09:56, , 46F
覺得怪異時就用printf印出來看看,然後不瞭解再問。
11/20 09:56, 46F
文章代碼(AID): #1Cuw5bR_ (C_and_CPP)