scanf卡住了

时间:2012-11-02 16:21:41

标签: c scanf

我是C的初学者。我在我的c程序中使用scanf函数,它被卡住了,只有当我输入exit时程序才会向前移动。 我面临问题的代码部分是:

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;
     }
 }

1 个答案:

答案 0 :(得分:2)

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

最终" \n"在阅读float后消耗所有空格。这意味着scanf仅在float之后收到非空格字符后返回 - 要使该字符到达程序,您通常需要在其后输入换行符。

如果从格式字符串中删除最后的空格,

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

scanf一读完float就会返回。然后它会在输入缓冲区中留下换行符 - 或者输入缓冲区中float之后的任何字符,因此在进一步扫描之前可能需要清除输入缓冲区。