gpt4 book ai didi

c - fscanf 一行读取两次

转载 作者:行者123 更新时间:2023-11-30 15:07:41 29 4
gpt4 key购买 nike

我在这样的文本文件中使用 fscanf:

T 1 1000
T 2 700
N 3 450
Y 4 200

我正在尝试计算使用 malloc 的行数并使用以下方法:

Prize temp;
int count =0;
while ((fscanf(fa,"%c %d %f", &temp.A, &temp.B, &temp.C))!= EOF)
count ++;

其中奖品是一个结构:

typedef struct {
char A;
int B;
float C;
} Prize;

所以,读完这些行后,程序会打印出以下内容:

 A: T B: 1 C: 1000.0000
A: B: 0 C: 0.0000
A: T B: 2 C: 700.0000
A: B: 0 C: 0.0000
A: N B: 3 C: 450.0000
A: B: 0 C: 0.0000
A: Y B: 4 C: 200.0000

使用调试器,我注意到 fscanf 得到(例如在读取第一行时):

A = 84 'T',B=1,C=1000

并且不是读取第二行,而是读取另一个第一行,但像这样:

A = 10'\n',B=1,C=1000

并继续对除最后一行之外的每一行执行此操作。

我控制了该文件,它没有多余的空格或行。

有什么解决问题的建议吗?

最佳答案

您的文件包含换行符。所以文件中的字符顺序实际上如下:

T 1 1000\nT 2 700\n...

第一个 fscanf 读取 'T'11000。它停在 '\n' 字符处。

秒fscanf将'\n'字符读取到temp.A。现在它位于第二个“T”字符处。因此,无法读取 temp.Btemp.C

第三个 fscanf 读取 'T'2700,但在 '\n' 处停止> 再次。

在读取 temp.A 之前,您应该跳过所有空白字符,这是通过格式字符串中的空格完成的:

...fscanf(fa," %c %d %f", &temp.A, &temp.B, &temp.C)...

关于c - fscanf 一行读取两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037955/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com