在C中打开文件后的fscanf问题

在C中打开文件后的fscanf问题,c,C,我正在写一个程序,打开一个文件,读取并存储数据 数据文件的布局显示为名称;身份证件分数数 i、 鲍比·雷·雷诺兹;111;10%;一, 如何将这些字段存储在不同的变量中。 这就是我正在尝试的: fscanf(fp, "%s %d %d %d", name,id,score,number); fscanf的%s格式说明符的问题是,它一到达空格就停止。鉴于您的格式,这是不正确的:您正在寻找一个分号以下的数据读取 这可以通过%[^;]格式实现。完整的格式字符串还将使用分号作为%d说明符之间的

我正在写一个程序,打开一个文件,读取并存储数据

数据文件的布局显示为名称;身份证件分数数

i、 鲍比·雷·雷诺兹;111;10%;一,

如何将这些字段存储在不同的变量中。 这就是我正在尝试的:

    fscanf(fp, "%s %d %d %d", name,id,score,number);
fscanf的%s格式说明符的问题是,它一到达空格就停止。鉴于您的格式,这是不正确的:您正在寻找一个分号以下的数据读取

这可以通过%[^;]格式实现。完整的格式字符串还将使用分号作为%d说明符之间的分隔符,以匹配文件的格式,如下所示:

fscanf(fp, "%32[^;];%d;%d%%;%d", name, id, score, number);
上文注32。此限制应与您希望读取的最长名称相对应。如果名称是由N个字符组成的数组,请将N-1用于%和[^;]之间的值,以避免缓冲区溢出。还要注意第二个%d之后的%%。符合fscanf规则要求的百分比符号秒百分比所需的值。

fscanf的%s格式说明符的问题是,它一到达空格就停止。鉴于您的格式,这是不正确的:您正在寻找一个分号以下的数据读取

这可以通过%[^;]格式实现。完整的格式字符串还将使用分号作为%d说明符之间的分隔符,以匹配文件的格式,如下所示:

fscanf(fp, "%32[^;];%d;%d%%;%d", name, id, score, number);

上文注32。此限制应与您希望读取的最长名称相对应。如果名称是由N个字符组成的数组,请将N-1用于%和[^;]之间的值,以避免缓冲区溢出。还要注意第二个%d之后的%%。符合fscanf规则要求的百分比符号秒百分比。

如果要编写读入一行数据并对其进行解析的代码,请从读入一行数据的代码开始。然后编写代码来解析这一行。你试过了吗?fscanffp,%s;%d、 %d%%;%d、 姓名、身份证、分数、号码;如果要编写读入一行数据并对其进行解析的代码,请从读入一行数据的代码开始。然后编写代码来解析这一行。你试过了吗?fscanffp,%s;%d、 %d%%;%d、 姓名、身份证、分数、号码;