【发布时间】: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