我是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;
}
}
答案 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
之后的任何字符,因此在进一步扫描之前可能需要清除输入缓冲区。