2012-04-27 11 views
1

文字を読み込んでテーブルに格納するためにgetchar()を使用します。また、整数を取得するためにscanfも使用します。scanfは、以前に実行されたgetchar()の入力を取得します。

scanf()の問題は、ユーザーの入力を待つのではなく、前の行に指定された最後の文字をバッファからgetchar()で読み取ることです。

私はsscanf、fflush(stdin)を試しました。私はまだ同じ動作を得ています。

#include <stdio.h> 
#include <stdlib.h> 


main() 
{ 
    int i, choice, tmp_day, tmp_month; 
    char name[5]; 

    printf("insert choice(1-3):\n"); 
    scanf("%d",&choice); 


    printf("name: "); 
    for (i=0;i<5;i++) name[i]=getchar(); 

    name[5] = '\0' ; 

    printf("day (1-31): "); 

    scanf("%d",&tmp_day); 

    printf("month (1-12): "); 

    scanf("%d",&tmp_month); 

    printf("\n%d %d", tmp_day, tmp_month); 

} 

ありがとうございます。およそfflush(stdin)必ずしもポータブルない

fflush(stdin); 
+0

char name [5]; - > char name [6]; index 0..5 = size is 6 – BLUEPIXY

答えて

0

は、このステートメントを使用するのscanf。

http://c-faq.com/stdio/gets_flush2.html 
+0

あなたは 'fflush(stdin);'を意味しましたか? – Jack

+0

mea culpa、typo :) – Satya

+0

あまりにも誤植だけでなく、未定義の動作です。 –

1

詳細な議論:各後

+0

ありがとうございますが、十分ではありません。彼はfgetsとsscanfを提案しますが、まだ消費されていないfgetsの\ n文字には問題があります。だから、私は最終的に、それをカスタムcleanBufferと組み合わせました。(これはwhile((c = getchar())!= '\ n' && c!= EOF)) – Chris

+0

これはgetl​​ineとsscanfの組み合わせが最適です。ここで説明したようにhttp://crasseux.com/books/ctutorial/fgets.html、fgetsは廃止されました – Chris

+0

getsは実際にはもはやC11標準の一部ではありません。 fgets()はです。だから私はあなたが駄目になったことを意味すると思う。私はそれが不法だと思うのが好きです。 http://gets.wikipedia.org/wiki/C_file_input/output –

関連する問題