2014-02-14 58 views
0

我用下面的代碼:爲什麼getche()函數會在輸入鍵被按下時覆蓋輸入?

#include <stdio.h> 
int main() 
{ 
    char ch,a[5]; 
    int j=0; 
    while((ch=getche())!='\n') 
    { 
    a[j]=ch; 
    j++; 
    } 
    printf("%c",a[2]); 
    return 0; 
} 

當我輸入的字符,然後按進入線的末端鍵,blinker`s位置被移位到屏幕的左上角和進一步的字符可以是看起來會覆蓋預先存在的字符(但不會)的輸入。

使用ch=getchar()而不是getche()結束循環並按預期顯示值。我無法使用getche()獲得類似的輸出嗎?使用getche()'\n'不會顯示輸出。但是,使用一些其他字符而不是'\n'(例如n)工作得很好。

回答

1
  1. 有變化取決於鍵盤和stdin,但getche()得到鑰匙沒有呼應。當用戶鍵入輸入時,未使用的字符可能是'\n''\r'。打印時,您將獲得相應的換行或回車。由於輸入映射到您的鍵盤上的'\r',當通過getche()獲取時,測試並打印'\n'。當通過getchar()獲取時,C將輸入'\n'

    int ch = getche(); 
    if (ch == '\r') c = '\n'; 
    printf("%c", ch); 
    
  2. 使用int ch這樣的代碼可以檢查EOF。