2

我是 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;
     }
 }
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 回答