[問題] 新手 請幫忙除錯!(不知哪裡有錯)

作者: belaniconaze (Nosae)   2016-07-02 20:50:42
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)VC++2015
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)NO
問題(Question):我是要設計一個可以打密碼的程式
預設密碼是ABCDe111111
但是我一執行
按完密碼後就完全卡在那邊
也沒有當機的現象
我真的不知道怎麼了
*[m
餵入的資料(Input):ABCDe111111
預期的正確結果(Expected Output):電腦顯示:correct!,程式正常結束
錯誤結果(Wrong Output):如上文講到的,黑黑畫面上的那個底線就一直閃一直閃
完全沒有繼續執行,感覺像是還在getche那段
程式碼(Code):(請善用置底文網頁, 記得排版)
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
char passcode[40];
int a;
printf("請輸入密碼:\n");
for (a = 0; passcode[a] != 13; a++)
{
passcode[a] = _getche();/*getche前面有底線是他教我用的/*
if (passcode[a] == 8)
{
a -= 1;
}
}
char correct[] = { 'A','B','C','D','e','1','1','1','1','1','1',13 };
a = 0;
check:
if (correct[a] == passcode[a])
{
if (passcode[a] == 13)
{
goto correct;
}
else
{
a++;
goto check;
}
}
else if (correct[a] != passcode[a])
goto wrong;
correct: printf("correct!\n");
goto end;
wrong: printf("WRONG!\n");
end: system("PAUSE");
return 0;
}

補充說明(Supplement):我之所以不用getch是因為我想清出的知道發生甚麼事
等問題解決了會改回getch*[m
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-07-04 16:09:00
程式有改組態當然過期。微軟的那美克星中文隨便看就好
作者: springman (司布林)   2016-07-02 20:57:00
這是多久以前的例子?getch() 與 getche() 好像是 dos年代使用的方式。還用 goto,雖然 goto 是合法的關鍵字可是儘可能不要使用。
作者: poolongkong (普攏貢)   2016-07-02 21:01:00
是 for 條件句的問題嗎改成 a < 11 呢如果記得沒錯的話 passcode[a] != 13 這樣子的意思是
作者: ilms49898723 (LittleBird)   2016-07-02 21:50:00
for迴圈的部分,你讀完放到passcode[a],for在判斷前a會先++,判的不是你剛存的那一個(會是a-1)補充一下怕誤會,for判斷p...[a],換行在p...[a-1]
作者: art1 (人,原來不是人)   2016-07-02 22:28:00
char(13)+char(10) 在vc底下似乎才是按enter會送出的內容所以用來判斷停止的條件永遠達不到,就卡在迴圈裡面了check裡面用來比較的程式碼也很怪,你要一個字元一個字元比結果輸入密碼的地方有用for迴圈,check那邊卻沒有,超怪..喔,看懂了,沒用過這種goto的迴圈用法...
作者: phishingphi (hsnutontu)   2016-07-03 02:18:00
passcode沒初始化也不知道一開始passcode[0]是甚麼值或許一開始passcode[0]剛好值就是13那不就沒輸入密碼
作者: Sidney0503 (Sidney0503)   2016-07-03 10:15:00
居然是dos時代的標頭檔XD
作者: art1 (人,原來不是人)   2016-07-03 10:46:00
要用換行字元當結束條件,用'\n'比較好
作者: VictorTom (鬼翼&娃娃魚)   2016-07-03 14:09:00
既然都用VC2015了, 直接用除錯功能單步執行看看如何?
作者: bibo9901 (function(){})()   2016-07-03 14:26:00
while 會用到 passcode[-1]
作者: art1 (人,原來不是人)   2016-07-03 16:36:00
先從正確密碼只有兩個字元開始如果只是要把換行字元當成跳出迴圈的條件,其實不必讓正確密碼內有換行字元
作者: frank99977 (hello)   2016-07-07 12:18:00
springman老師好!

Links booklink

Contact Us: admin [ a t ] ucptt.com