【问题标题】:having problems saving data to a text file将数据保存到文本文件时出现问题
【发布时间】:2020-06-04 17:53:53
【问题描述】:

数据没有正确保存,for 循环的第一个循环给了我们随机字符,但是下面的循环给了我们正确的数字

任何帮助将不胜感激

int    saveDroneSimResults(delivery_info deliveryinfo, int no_of_deliveries){
        int numdel, i;
        numdel = no_of_deliveries;

        printf("NUM DEL: %d\n\n", numdel);

        FILE file = fopen("results.txt", "w");
        if(file == NULL){

            printf("ERROR! The file failed to open!\n");
            exit(-1);

        }


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

            fprintf(file, "%d %d %19s %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n", deliveryinfo[i].deliveryID, 
            deliveryinfo[i].drone_ID, deliveryinfo[i].drone_name, deliveryinfo[i].max_distance , deliveryinfo[i].load_capacity ,
            deliveryinfo[i].Delivery_Orig_loc_x , deliveryinfo[i].Delivery_Orig_loc_y , deliveryinfo[i].Delivery_Desti_loc_x , 
            deliveryinfo[i].Delivery_Desti_loc_y , deliveryinfo[i].load_capacity, deliveryinfo[i].Delivery_distance);
        }

        fclose(file);

        return 0;

【问题讨论】:

    标签: c arrays loops pointers


    【解决方案1】:

    我不确定您是如何没有收到错误消息的,但您缺少 * (FILE *file = fopen(...))。

    【讨论】:

      【解决方案2】:

      如果 i = 1 时它工作正常,那么您只需将 for 循环更改为:

      for(i =1; i< numdel; i++)
      

      根据给出的代码,我不知道其余部分是否有问题,因为我对交付信息一无所知。如果将一个长的 fprintf 分成多个不同的 fprintf 语句,可能有助于调试代码。

      我会改成:

      fprintf(file,"%d %d ",deliveryinfo[i].deliveryID, deliveryinfo[i].drone_ID);
      fprintf(file, "%19s %.2lf ",deliveryinfo[i].drone_name, deliveryinfo[i].max_distance);
      fprintf(file, "%.2lf %.2lf ",deliveryinfo[i].load_capacity ,
                  deliveryinfo[i].Delivery_Orig_loc_x);
      fprintf(file, "%.2lf %.2lf ", deliveryinfo[i].Delivery_Orig_loc_y , deliveryinfo[i].Delivery_Desti_loc_x );
      fprintf(file, "%.2lf %.2lf "deliveryinfo[i].Delivery_Desti_loc_y , deliveryinfo[i].load_capacity);
      fprintf(file, "%.2lf\n", deliveryinfo[i].Delivery_distance);
      

      纯粹是为了让您和其他任何人在未来更容易阅读代码。每个 fprintf 也可以有 3 个变量,但任何超过 3 个的变量都很难快速检查。

      为了进一步排除故障,我建议您查看交付信息的内容并确保存储在那里的内容与您想要的内容正确。

      编辑:正如@Majkl 指出的那样,您打开的文件也是错误的。应该是:

       FILE *file = fopen("results.txt", "w");
      

      【讨论】:

        最近更新 更多