无法将双数正确导入到 C 程序中

标签 c file-io io

我有一个这样格式化的txt文件:

MyDepartureTown MyDestinationTown 123.45 Vehicle 12

我正在尝试将数据导入到我的 C 程序中。这是我用来实现这一目标的代码:

void import_city_info(Grafo *G)
{
    char city_dep[20];
    char city_des[20];
    double km;
    char vehicle[12];
    int time;

    FILE *data_file = fopen("data/routes.txt", "r");
    if (data_file == NULL)
    {
        fprintf(stderr, "Errore. Impossibile aprire il file.\n");
        exit(EXIT_FAILURE);
    }

    while (5 == fscanf(data_file, "%s %s %f %s %d", &city_dep, &city_des, &km, &vehicle, &time))
    {
        printf("%2.3f\n", km);
        //more code...

    }
}

当我尝试打印双数时,它输出0.00。它实际上正确导入了除 double 据之外的所有数据。我做错了什么?

最佳答案

您使用了错误的说明符来读取double。这将调用未定义的行为。您需要%lf

while (5 == fscanf(data_file, "%s %s %lf %s %d", &city_dep, &city_des, &km, &vehicle, &time))
{

关于无法将双数正确导入到 C 程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938974/

相关文章:

c - 以下应该包含整数溢出的代码的正确答案应该是什么?

c++ - 文件不会将输出保存到文件,并奇怪地打印出一个字符串 C++ Linux

c++ - CPP 读取文件但 EXE 不读取

java - 如何解析字符串以分隔整数? java

java - 在 Java 中生成 PDF

c++ - 泄漏的内存是否会在 C/C++ 程序运行期间始终丢失?

c - 如何退出 while 循环?

c - 用于复制文件的 execvp 替代方案,一旦复制完成,我希望它通知

java - 如何使用java获取文件关闭事件

java - 使用扫描仪 Java 的文件名