gpt4 book ai didi

c - fscanf 没有正确匹配

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:01 26 4
gpt4 key购买 nike

我正在尝试通读一个如下所示的文件:

truck, wanted, 4000
truck, for sale, 2000
microwave, for sale, 2
truck, wanted, 4000

但是我的 fscanf 正在返回 1(应该是 3):

fscanf(file,
"%s, %[^,], %d",
items[i].type,
temp,
&items[i].price)

基本上我想像 CSV 一样阅读它,第一个词到第一个 var,第二个词(wantedfor sale)到 temp,然后将数字放入第三个变量中。

最佳答案

fscanf 不是那样工作的。当您指定 %s 格式说明符时,它会读取所有内容,直到下一个空格(或输入结束)。这意味着您的第一个 %s 将读取 truck,,即将逗号包含到它读取的字符串中。 %s 不关心在您的格式字符串中您将 , 放在 %s 之后,因此有点“请求”留下未读的逗号。 fscanf 不支持此类请求。 fscanf 没有任何高级先行或模式匹配功能。它盲目地读取当前格式说明符所请求的数量。 %s 读取到下一个空格 - 这就是它所关心的。

如果您想将其作为 CSV 值读取,则必须手动引导 fscanf 的每一步。在这种情况下,您可以对所有字符串值使用 %[^,]。这样的事情可能会奏效

fscanf(file,
"%[^,], %[^,], %d",
items[i].type,
temp,
&items[i].price)

如果要跳过任何前导空格,可以使用 "%[^,], %[^,], %d" 格式。

%d前的空格可以省略,表示"%[^,], %[^,],%d"相同“%[^,], %[^,], %d”

关于c - fscanf 没有正确匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35007436/

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