質問

私は、次のコードでgetchar()の役割について混乱しています。私は私が私が入力します。キーを押したときにのみ閉じられます出力ウィンドウを参照してください支援しています知っているわけます。

私は入力して単一の文字を読み込み押しする

だから、getchar()は基本的に待機しています。

この機能が読んでいるその単一の文字とは何ですか?私はそれを読むためのキーボードから任意のキーを押していませんでした。

さて、それは何を読んでいないとき、なぜそれが「私が読むことねえ、あなたは何も入力しませんでした」というエラーを与えるものではありません?

#include <stdio.h>

int main()
{
    printf( "blah \n" );
    getchar();
    return 0;
}
役に立ちましたか?

解決

それはそれがないまでプログラムを保持し、文字を受信するまで、

getchar()機能は単純に待機します。

あなたが入力したキーを打ったときに

の文字が送信されます。 Windows OSの下では、キャリッジリターン(CR)とラインフィード(LF)を送信します。

のためのこのCodingHorrorポストを参照してください。うまく説明を入れます。

(... CR + LFの一部ではなく、getchar()遮断部の説明)

他のヒント

getchar関数は、()のブロックの機能であるためです。

それがあります

あなたは<のhref = "http://www.google.com/search?hl=en&safe=off&rlz=1C1GGLS_enUS359US359&q=blocking+functions&aq=f&aqi=g-m1&aql=&oq=" のrel = "noreferrer" についてお読みください>ブロックの機能は、基本的には、が起こることを何かのためのを待つプロセスを作るこれは、に。

このの待っているの振る舞いの実装は、機能に依存するが、通常はそれが起こるためにいくつかのイベント待ちループです。

getchar()関数の場合には、これはおそらく、常にファイル(この場合は標準入力)を読み取り、チェックは、ファイルが変更された天気ループとして実装されます。ファイルが変更された場合、ループは他の何かをすることによって動作します。

これを試してください:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char ch;

    printf("I'm now going to block until you press something and then return... ");

    ch = getchar();

    if (ch >= 0)
       printf("\nYou pressed %c\n", ch);
    else
       printf("\nAliens have taken over standard input! Run!\n");

    return 0;
}

getchar()は、キーボードまで、スリープ状態にするためのプログラム(または任意の標準入力に接続されている)が受信され、割り込みが発生します。これは、追加のコードがgetchar()が戻るまで実行されません、ブロックを意味します。

これは、それを理解するために、の機能のの戻り値を確認することは非常に、非常に便利です。

それは、ブロッキングを防止するために、いくつかのメカニズムを提供しない限り、

任意の機能は、ブロックすることができます。例えば、open()は、モデムのようなデバイスを応答が遅く開くために有用であるO_NONBLOCKフラグを可能にします。それは、端末から入力を取得するか、カーネルやいくつかのデバイスからの応答を取得するために待機する必要がある場合は要するに、それはブロックする可能性は非常に良いチャンスがあります。

getchar関数()ブロックプログラムの実行キーが押されるまで。だから、そこにはキーが押されていない場合、エラーがgetchar関数()、ません、それが起こるのを待ちます。)

あなたはGETCHARがここでどのように動作するかについての詳細を学ぶことができます。 http://www.cppreference.com/wiki/c/io/getchar ...これは、あなたの質問に答える必要があります。)

私が何を混乱するプログラムが継続するbefor Enterキーが必要とされていることだと思います。入力されるまでデフォルトでは、端末は、すべての情報をバッファリングするも、Cプログラムに送信する前に、押されています。

タグをここでの問題を入力する説明を参照してください
scroll top