从链表中计算数据,并将结果输出到C中的CSV文件中

从链表中计算数据,并将结果输出到C中的CSV文件中,c,printing,linked-list,output,C,Printing,Linked List,Output,我用C语言创建了一个程序,其中一个由坐标和位置ID组成的CSV文件被插入到一个链表中。然后我: 找到x坐标与ID相乘的最小值和最大值 找到y坐标与ID相乘的最小值和最大值 现在我必须将4个计算结果、相应的位置ID和x坐标打印到CSV文件中 我已经看过了关于如何实现这一点的各种教程,但它们只展示了如何将未修改的值从链表打印到输出文件中的方法 如果这真的让人困惑,很抱歉。如果你想让我澄清任何事情,请发表评论 #include <stdio.h> #include <stdlib

我用C语言创建了一个程序,其中一个由坐标和位置ID组成的CSV文件被插入到一个链表中。然后我:

  • 找到x坐标与ID相乘的最小值和最大值
  • 找到y坐标与ID相乘的最小值和最大值
现在我必须将4个计算结果、相应的位置ID和x坐标打印到CSV文件中

我已经看过了关于如何实现这一点的各种教程,但它们只展示了如何将未修改的值从链表打印到输出文件中的方法

如果这真的让人困惑,很抱歉。如果你想让我澄清任何事情,请发表评论

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/time.h>
#include <string.h>

#define MAX 200

struct wake {
    double x, y, u, v, id;
    struct wake *next;
}*head;                                                         

typedef struct wake data;

void read_csv();
void minNode();
void maxNode();

int main(int argc, char *argv[]) {
    read_csv();
}

void read_csv() {
    // Opens the CSV datafile
    FILE *fp = fopen("data2.csv", "r");
    
    char buffer[MAX];
    struct wake** tail = &head;
    
    while (fgets(buffer, MAX, fp)) {
        data *node = malloc(sizeof(data));
        node->x = atof(strtok(buffer, ","));
        node->y = atof(strtok(NULL, ","));
        node->u = atof(strtok(NULL, ","));
        node->v = atof(strtok(NULL, ","));
        node->id = atof(strtok(NULL, ","));
        node->next = NULL;
        *tail = node;
        tail = &node->next;
  
    }
    minNode();
    maxNode();
}

void minNode() {  
    struct wake *current = head;  
    
    double x_id, y_id;
    //double min;
      
    if(head == NULL) {  
        printf("List is empty \n");  
    }  
    else {  
        //Initializing min with head node data  
        x_id = head->id*head->x;
        y_id = head->id*head->y;
          
        while(current != NULL){  
             //If current node's data is smaller than min  
             //Then, replace value of min with current node's data  
             if(x_id > current->id*current->x) {  
                 x_id = current->id*current->x;
             }
             
             if(y_id > current->id*current->y) {  
                 y_id = current->id*current->y;
             }
             current= current->next;  
        }          
        printf("Min x X id: %lf\n",x_id);  
        printf("Min y X id: %lf\n",y_id); 
    }  
}

void maxNode() {
    struct wake *current = head;  
    
    double x_id, y_id;
    //double min;
      
    if(head == NULL) {  
        printf("List is empty \n");  
    }  
    else {  
        //Initializing min with head node data  
        x_id = head->id*head->x;
        y_id = head->id*head->y;
          
        while(current != NULL){  
             //If current node's data is smaller than min  
             //Then, replace value of min with current node's data  
             if(x_id < current->id*current->x) {  
                 x_id = current->id*current->x;
             }  
             if(y_id < current->id*current->y) {  
                 y_id = current->id*current->y;
             }
             current= current->next;  
        }          
        printf("Max x X id: %lf\n",x_id);  
        printf("Max y X id: %lf\n",y_id); 
    }  
}

因此,您知道如何从链表中获取未修改的值。您可能知道如何将值相乘。你知道如何寻找最小值/最大值吗?如果没有找到的话。在这一点上,我真的不明白你的问题是什么。请关注您的具体问题。我的问题是:我必须将4个计算、相应的位置ID和x坐标打印到CSV文件中。对于4个计算中的每一个,我如何将其相应的ID和x坐标输出到CSV文件中?您知道如何将值写入ascii文件,不是吗?如果你不先找出答案,我想暗示的是
19.743748,-11.838155,1.083537,-0.003929,0.947989
19.810734,-11.838155,1.083533,-0.004183,0.947972
19.877850,-11.838155,1.083525,-0.004426,0.947953
19.945097,-11.838155,1.083514,-0.004656,0.947930
20.012476,-11.838155,1.083501,-0.004868,0.947904
20.079988,-11.838155,1.083488,-0.005062,0.947875
20.147631,-11.838155,1.083478,-0.005237,0.947844
20.215405,-11.838155,1.083475,-0.005394,0.947812