保存数据到文本文件时出现问题

问题描述 投票:-1回答:1

数据没有正确保存,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个回答
0
投票

我不知道你为什么没有收到错误信息,但你缺少了* (FILE *file = fopen(...))。


0
投票

如果当i = 1时工作正常,那么你可以将你的for循环改为。

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

根据给定的代码,我不知道其他部分是否有问题 因为我对deliveryinfo一窍不通。如果你把一个长的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个变量就很难快速检查了。

为了进一步排除故障,我建议你看一下delivery info的内容,确保那里存储的内容是正确的,符合你的要求。

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

 FILE *file = fopen("results.txt", "w");
© www.soinside.com 2019 - 2024. All rights reserved.