20

私は次のプログラムを持っています

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

int main()
{
   char ans[8];
    int i;
    for(i=1;i<=3;i++)
    {
        printf("\n What is the unit of traffic ?");
        scanf("%s",ans);
        fflush(stdin);

        if(stricmp(ans,"Earlang")==0)
        {
            printf("\nAnswer is correct");
            exit(1);
        }
        else
            if(i<3)
            printf("\n Try Again!\n");
    }
    printf("\n Nunit of traffic is Earlang:");
}

fflush(stdin)このプログラムでの使用は何ですか?

4

3 に答える 3

6

次の改行まで入力バッファからすべてのデータを削除するのは、移植性のない方法です。次のような場合に使用されるのを見てきました。

char c;
char s[32];
puts("Type a char");
c=getchar();
fflush(stdin);
puts("Type a string");
fgets(s,32,stdin);

なしでfflush()、たとえば「a」と入力して Enter キーを押すと、入力バッファには「a\n」が含まれ、getchar()は「a」をピークしますが、「\n」はバッファに残ります。したがって、次のfgets()ユーザー入力を待たずに、それを見つけて空の文字列を返します。

ただし、この使用法fflush()は移植できないことに注意してください。たとえば、Linux マシンでテストしましたが、動作しません。

于 2013-08-11T09:22:02.927 に答える