【问题标题】:fscanf not saving values to variables [duplicate]fscanf没有将值保存到变量中[重复]
【发布时间】:2019-12-23 19:50:07
【问题描述】:

我正在尝试将文本文件解析为 x1、y1、x2 和 y2 的变量,但是当我打印变量以检查它们是否已更新为新值并且它们都是 0.000000。

txt 文件中的示例行是“W 0.2 0.1 0.2 0.2”,格式为“command x1 y1 x2 y2”。

void draw_walls(FILE *stream)
{
    while (!feof(stream))
    {
        char command;
        // Declare variables
        double wall_x1, wall_y1, wall_x2, wall_y2;

        int wall_count = fscanf(stream, "%c %lf %lf %lf %lf", &command, &wall_x1, &wall_y1, &wall_x2, &wall_y2);
        printf("%c %lf %lf %lf %lf", command, wall_x1, wall_y1, wall_x2, wall_y2);
    }
}

printf 应该返回“W 0.2 0.1 0.2 0.2”

目前只返回“0.000000 0.000000 0.000000 0.000000”

【问题讨论】:

  • 你应该打印wall_count。如果fscanf 成功,它将是 5。
  • printf("%d", wall_count);返回 335151515151515151515151515151
  • fscanf(stream, " %c%lf%lf%lf%lf", ... 在 %c 之前需要空间,在 %lf 之前是多余的
  • 建议:使用fgets()——char buffer[4096]; while (fgets(buffer, sizeof(buffer), stream) != 0) { … }一次读取一行,然后使用sscanf()解析该行。请注意,这意味着您可以打印整行用于诊断目的——这可能是非常宝贵的。 在调用此函数(或其他值)之前,您是否读取了行数? 如果是,则该数字之后的换行符留在输入中,第一个 command 值是 @987654330 @,并且 double 值的转换在 W 上失败(它不是数字)。

标签: c text-parsing


【解决方案1】:

您是否尝试过以下检查?

if (stream== NULL)
  printf("The file cannot be read.\n");

这将确保您能够首先读取文件。我同意“David C. Rankin”的观点。 如果通过引用正确传递,也尝试检查传递的参数。其次,检查格式说明符和文件。 feof() 仅针对 EOF 返回 0,而不针对遇到的任何其他错误。因此,正如我提到的,您需要明确检查 EOF 以外的条件。 参考:https://www.geeksforgeeks.org/eof-and-feof-in-c/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-11-10
  • 2019-12-25
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2022-11-03
相关资源
最近更新 更多