如何在文件*流中的特定点停止并扫描某些值?

时间:2018-06-15 11:00:17

标签: c file while-loop double filestream

我有一个名为test.txt的文件,该文件包含:

<this is a test = 1>

<more tests = 42 and more "34">

<start>10.213123 41.21231 23.15323</start>

<random stuff = "4">

<blah 234>

当我看到<start>时,我希望将这3个数字扫描成这样的双精度数据之后:

x = 10.213123
y = 41.21231
z = 23.15323

我有点困惑,因为在这里,fgets扫描整条线,我如何将3个数字扫描成双?因为数字可以是各种长度?我这样做是为了打印出它从文件中读取的内容,但我无法绕过它。

void  print_lines(FILE *stream) {
    char line[MAX_LINE_LENGTH];
    while (fgets(line, MAX_LINE_LENGTH, stream) != NULL) {
        fputs(line, stdout);
    }
}

1 个答案:

答案 0 :(得分:1)

当您看到ng build --env=prod时,将3个数字扫描成双倍。您拥有<start>变量中的行内容,您可以使用strtod将字符串扫描为double。您甚至可以使用line,但使用strtod更适合错误处理。

sscanf(line, "<start>%lf %lf %lf</start>", &x, &y, &z);