2015-11-08 10 views
0

我只是想問問有什麼用getch()的重要性,尤其是在這個陣列/ for循環的例子,我們的教授向我們展示:重要性使用裏面的getch()的for循環

int i; 
char pw[7], ch; 

printf ("\npw: "); 

for (i=0; i<7; i++) { 
    ch = getch(); 
    pw[i] = ch; 
    printf ("%c", ch); 
} 

我嘗試刪除ch = getch()行,當我運行該程序時發生的事情是該循環一直持續。

爲什麼會發生這種情況?

我只理解getch()用於程序結束時不顯示屏幕上的字符(來自在線定義)。

+3

「永恆的循環。」你確定?無論'getch'是否存在,該循環都應該在7次迭代後終止。 – kaylum

+0

當我編譯並運行它時,程序永不停止;;也許在dev-C++中有一個小故障? @kaylum – fujisaki

+0

我非常懷疑編譯器有這樣一個簡單程序的錯誤。當程序在沒有'getch'行的情況下運行時,你看到了什麼?有什麼打印? (這意味着'ch'是未初始化的,因此程序在技術上會調用未定義的行爲,但它仍然不應該導致您聲稱的行爲)。 – kaylum

回答

0

getch()從鍵盤讀取一個字符而不回顯它。

所以你的程序正在讀取keybord(用戶輸入)中的一個字符。並將其存儲在ch變量中,然後將其保存在字符串數組pw []中,最後使用printf(「%c」)回顯它。

刪除ch = getch();。您的程序停止從鍵盤讀取。並使用與(未初始化的)ch相同的值填充pw [] 7次,然後退出循環。

根據您發佈的內容,您的程序在其他地方掛起,您正在測試密碼的有效性。

0

如果你註釋掉getch行它運行並結束,它不會永久循環,你必須刪除更多,才能永久性地將其更改爲循環。要回答你最初的問題[getch]得到一個字符,然後程序顯示它,就這些了。

0

Getch() - 從STDIN讀取單個字符,如果不存在,請等待它!

在您的示例中,Getch()扮演着核心角色,讀取用戶輸入(給定7個字符)。

如果去掉這一說法,不僅是你離開int ch未初始化(無有效值), 但循環不會等待任何東西(如getch()不會等待)。

有時,特別是當學習c++,從Visual Studio(或任何IDE使用)運行一個簡單的程序...
運行的程序是很短,你不能看到的輸出!
所以最後加了getch();,只是爲了告訴程序等待任何角色,或換句話說,讓窗口打開並等待我的按鍵。