2012-11-02 162 views
2

我是一個初學者在C.我在我的C程序中使用scanf函數,它卡住了,程序只在我輸入退出時才前進。 其中進出口面臨的問題代碼的部分是:scanf卡住

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

回答

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之後,因此可能需要在進一步掃描之前清除輸入緩衝區。