fscanf无法读取第二个%[^;]字符串及后续内容的问题求助
fscanf无法读取第二个%[^;]格式字符串及后续内容
代码片段
int ingatlanazonosito, alapterulet, emelet, szobak_szama, rezsi, berleti_dij; double x, y; char cim[300], butorozott[13]; while (fscanf(ingatlanfile,"%d;%[^;];%lf;%lf;%d;%d;%d;%[^;];%d;%d\n", &ingatlanazonosito, cim, &x, &y, &alapterulet, &emelet, &szobak_szama, butorozott, &rezsi, &berleti_dij) != EOF) { ingatlanbeszur(&ingatlanok, ingatlanazonosito, cim, x, y, alapterulet, emelet, szobak_szama, butorozott, rezsi, berleti_dij); }
问题现象
fscanf无法读取第二个%[^;]对应的butorozott变量及其后续内容,文件已正确打开,第二个字符串之前的内容读取正常,但butorozott变量全为\0。
目标文件内容
123456;Irinyi Jozsef u.;47.473;19.053;18;15;butorozott;1000;9500
问题原因
格式字符串的占位符数量、类型与文件实际字段不匹配:
- 文件用分号分隔共9个字段,但格式字符串写了10个占位符,其中第7个占位符是
%d(对应整数变量szobak_szama),但文件第7个字段是字符串butorozott。 - fscanf尝试将字符串转换为整数时失败,直接终止后续所有字段的读取,导致
butorozott未被赋值,保持初始的全\0状态。
解决方法
根据实际需求二选一:
方案1:修正代码(如果文件内容正确)
移除多余的整数占位符和对应变量,让格式字符串与文件字段匹配:
int ingatlanazonosito, alapterulet, emelet, rezsi, berleti_dij; double x, y; char cim[300], butorozott[13]; while (fscanf(ingatlanfile,"%d;%[^;];%lf;%lf;%d;%d;%[^;];%d;%d\n", &ingatlanazonosito, cim, &x, &y, &alapterulet, &emelet, butorozott, &rezsi, &berleti_dij) != EOF) { ingatlanbeszur(&ingatlanok, ingatlanazonosito, cim, x, y, alapterulet, emelet, butorozott, rezsi, berleti_dij); }
注意:同时要确保ingatlanbeszur函数的参数列表也做对应调整,移除szobak_szama相关参数。
方案2:修正文件内容(如果代码逻辑正确)
在文件中补充szobak_szama对应的整数字段(比如房间数),让字段数量和类型与格式字符串匹配:
123456;Irinyi Jozsef u.;47.473;19.053;18;15;3;butorozott;1000;9500
这里的3是示例房间数,可根据实际数据修改。
内容的提问来源于stack exchange,提问作者Péter Ujhelyi
相关产品推荐
相关产品推荐

