gpt4 book ai didi

c - fscanf 不会读取文本文件中的整数值

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:18 25 4
gpt4 key购买 nike

我正在使用 fscanf 读取行尾的 8 个零值或一值的序列,但看起来数组从未读取过值。

它正在从文本文件中读取:

Chilli Con Carne,Chilli_Con_Carne.txt, 15, 25, 100,0,0,0,0,0,0,0,0
Spaghetti Bolognese,Spaghetti_Bolognese.txt, 30, 75, 150, 0, 0, 0, 0, 0, 0, 1, 0
Frittata,Frittata.txt, 10, 15, 160, 1, 1, 0, 0, 0, 0, 0, 0
Korean Beef,Korean_Beef.txt, 20, 30, 100, 0, 0, 0, 0, 0, 1, 0, 1
Trawlers Pie, Trawlers_Pie.txt, 20, 30, 100,1,1,0,1,0,0,0,0

这是我正在使用的循环,其中包含未读取 recipeAllergies 的 fscanf:

while (!feof (cookBook)){

fscanf(cookBook, "%20[^,], %20[^,], %d, %d, %d", recipeName, recipeFileName, &prepTime, &cookTime, &calories);
printf("%s ", recipeName);

for (i = 0; i < 8; i++){

fscanf(cookBook, "%d,", &recipeAllergies[i]);
printf("%d %d\n", recipeAllergies[i], userAllergies[i]);

if ((userAllergies[i] + recipeAllergies[i]) == 2){
notSuitable = 1;
}

}
fgets(ignore_line, sizeof(ignore_line), cookBook);

if (notSuitable == 0){
(suitableRecipes[totalSuitable]. recipeName, recipeFileName, prepTime, cookTime, calories);
totalSuitable++;
}
}

非常感谢任何帮助。

最佳答案

内部循环有一个格式字符串 "%d," 所以 fscanf() 正在寻找后跟逗号的整数。输入行末尾没有逗号,因此 scanf() 将返回错误指示。

要么在输入行末尾添加逗号,要么更改循环,使其第 8 次不再查找逗号。后者更可取。

虽然您没有询问,但您可能希望通过代码解决其他一些问题......

  • feof() 上循环是一个非常糟糕的主意,因为(除其他问题外)如果在循环体中没有检测到错误,它将尝试再读取一个文件中的输入行比现有的多。
  • 始终检查 fscanf()fprintf() 等函数的返回值,因为它们可能会失败。
  • 在同一个文件中混合使用 fgets()fscanf() 是个坏主意,因为他们对文件内容的 react 不同(例如,他们如何回应到换行符)并结合使用它们会导致虚假数据丢失。 [更一般地说,混合风格也是如此输入。不要混合输入同一文件的方式。混合面向字符的输入(例如 fgetc()),面向行的输入(例如 fgets())和/或格式化输入(例如 fscanf())如果在同一流上使用它们都可能导致虚假问题。]
  • if (notSuitable == 0) block 中的第一条语句不执行任何事物。我假设你遗漏了函数的名称打电话。

关于c - fscanf 不会读取文本文件中的整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224290/

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