2

Cの初心者です。cプログラムでscanf関数を使用していると、スタックし、exitと入力した場合にのみプログラムが先に進みます。Imが問題に直面しているコードの部分は次のとおりです。

while(fread(&emr,recsize_emr,sizeof(emr)/recsize_emr,fp)==1)
{
    if(emr.emr_id==emr_id)
    {
        printf("%s %s %s %d %d %s %s %f \n\n",emr.fname,emr.lname,emr.company_name,emr.emr_id,emr.agt_id,emr.pol_start_date,emr.pol_end_date,emr.amount);
        printf("Enter New First Name, Last Name, Company Name, EmployerID, AgentID, Policy Start Date, Policy End Date, Amount : ");
        scanf("%s %s %s %d %d %s %s %f \n",emr.fname,emr.lname,emr.company_name,&emr.emr_id,&emr.agt_id,emr.pol_start_date,emr.pol_end_date,&emr.amount);
        fseek(fp,-recsize_emr,SEEK_CUR);
        fwrite(&emr,recsize_emr,sizeof(emr)/recsize_emr,fp);
        break;
     }
 }
4

1 に答える 1

2

scanf("%s %s %s %d %d %s %s %f \n");

finalは、が読み取られ" \n"た後にすべての空白を消費します。floatつまり、 のscanf後に非空白文字を受け取った後にのみ返されることを意味しますfloat- その文字がプログラムに到達するには、通常、その後に改行を入力する必要があります。

フォーマット文字列から最後の空白を削除すると、

scanf("%s %s %s %d %d %s %s %f");

は、scanf読み取りが完了するとすぐに戻りますfloat。次に、改行、または入力バッファの入力の後に続く任意の文字を残すため、floatさらにスキャンする前に入力バッファをクリアする必要がある可能性があります。

于 2012-11-02T16:48:57.490 に答える