You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:06:14