2017-02-17 10 views
1

fgets()から入力を読み込もうとしていますが、その機能はキーボードからの出力を待っていません。 fgetsを使用するように言われたので、scanfはオプションではありません。 fgetsファンクションは、何らかの理由でmainファンクションで使用された場合には、が機能しますが、追加機能はありません。fgetsがstdinを待たずに

ここでプログラムがfgets()をスキップしていない入力を待ち、以降、私は名前の文字列をしたいいくつかの空の文字列を追加するコード

char name[21]={0x0}; //tried everything; not assigning value and NULL&\0 

    printf("\nName: "); 

    //fseek(stdin,0,SEEK_END); 
    //rewind(stdin); 
    //fflush(stdin);  //these don't help 
    printf(stdin);  //for testing purposes, probably pointless 
    fgets(nimi, 21, stdin); 

です。しかし、エラーチェックがあるので、nameは値NULLを取得しません。私はこの問題を抱えている人がかなりいることを知っていますが、私は助けを見つけることはできませんでした。ほとんどの人はscanfやその他の機能を使用するよう指示します。レコードのためにscanf()はここで期待通りに動作します。構文はmain()で動作するので正しいはずです。私はおそらくstdinが実際に働く方法を知らないので、タイトルがばかだと謝ります。

このコードは(else節た場合)、ポインタのためのmallocの後に直接である

+8

_テスト目的のために、おそらく無意味です_....いいえ、それは間違っています.... – LPs

+2

fgetsを使用する前にstdinをクリアする必要があります。 –

+5

このコードの前に 'scanf()'を使っていますか? (printf(stdin);)に加えて、(問題があると思われる)問題があります。 – chux

答えて

4

人々は私の入力バッファに何かがあることを指摘し、それが正しいです。私はfgetsを前に、私のコードで

while ((int ch = getchar()) != '\n' && ch != EOF); 

が含まれている場合私のプログラムが機能するようになりました()。実際にはこれの前にscanf関数がありました。私は答えた人に永遠に感謝しています!申し訳ありませんが、私は自分自身をコードで馬鹿みたいに見せかけました。これは私の最初のCプログラムの1つで、コードは "ちょっと"離れているかもしれません。もう一度ありがとう。

関連する問題