2011-12-15 19 views
0

私は文字入力関数をCで試しています。私は、getchとgetche関数の呼び出しを実験しているプログラムを実行しています。getcheは、Enterキーを押した後に画面を消去します。

#include <stdio.h> 
#include <conio.h> 
#define MAX_CHARS 255 
int main(){ 
//getche experiments 
    char buffer[MAX_CHARS+1],ch; 
    int x = 0; 
    while(x<MAX_CHARS&&(ch=getch())!='\r'){//relacing getch here with getche 
     buffer[x++]=ch; 
     putchar(ch); 
    } 
    buffer[x]='\0'; 
    printf("%s",buffer); 
    return 0; 
} 
  • 私はgetchは(でプログラムを実行する)Iを押すと、私はすぐに私は、キーボード( のputcharのおかげで)を介してそれらを入力すると、印刷された各文字 、全体のラインを見ることが(printfのおかげで最後に のステートメント)。それは問題ありません。
  • 私はgetcheをとgetchはを交換したとき、私は期待唯一の違いは、私が二回とすぐ、私は(getcheをがstdoutに文字をエコーするので)を入力し、最後の後で行 を印刷 として印刷入力した文字のそれぞれになるだろう ました私はenterを押します。しかし、全画面を入力するとすぐに がクリアされ、行が印刷されます。

最後に印刷する前に画面がクリアされるのはなぜですか?

は、私たちがgetcheのためのあなたのドキュメントは言うことを知らずに知るための方法はありません

+1

'getch'と' getche'(そしてヘッダ自体)は標準ではないので、使用しているコンパイラと環境を指定する必要があります.Turbo Cのような古代のものと思われますか? –

+0

@David Scwartz、@ Paul R - 私はWindows上でMicrosoft Visual Studio 8コンパイラを使用しています。xp 32ビットプラットフォーム – ZoomIn

+0

OK - これを反映するようにタグを修正しました。コードをポータブルにしたい場合は、標準のライブラリ関数に従い、などの非標準の従来のAPIを避けることをお勧めします。 –

答えて

0

ありがとうございます。そのような標準機能はありません。私の推測では、それはprintfに書き込む画面とは別の画面に書き込みます。 1つの画面(the raw 'console' screen you echoed to)から別の画面(プログラムの標準出力が接続されている通常の端末)に切り替えたため、画面がクリアされています。

getcheのプラットフォームのドキュメントは何を表していますか?

関連する問題