Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在结构中查找最小/最大值_C_Struct - Fatal编程技术网

C 在结构中查找最小/最大值

C 在结构中查找最小/最大值,c,struct,C,Struct,因此,我打开了一个CSV文件,并将其添加到结构中。我想在第三列中找到最高/最低值,在第四列中找到最高/最低值。然后打印出它们出现的每一行 typedef struct { float xvalue; float yvalue; float uvalue; float vvalue; } flow_data; 下面是添加CSV文件- int total = 0; flow_data d; flow_data* dataset = NULL; while(4 ==

因此,我打开了一个CSV文件,并将其添加到结构中。我想在第三列中找到最高/最低值,在第四列中找到最高/最低值。然后打印出它们出现的每一行

typedef struct {
    float xvalue;
    float yvalue;
    float uvalue;
    float vvalue;
} flow_data;
下面是添加CSV文件-

int total = 0;
flow_data d;
flow_data* dataset = NULL;

while(4 == fscanf(fp, "%f, %f, %f, %f\n", &d.xvalue, &d.yvalue, &d.uvalue, &d.vvalue))
{
    dataset = realloc(dataset, sizeof(*dataset) * (total + 1));
    dataset[total] = d;
    total++;
}
至于手术,我知道这是一种荒谬的方式,但我不知道如何提高效率。如何将所有内容添加到函数中?可以将整个结构传递到函数中吗

float minvalueu = 100000, maxvalueu = 0;
float minvaluev = 100000, maxvaluev = 0;
int ivalueofminu = 0, ivalueofmaxu = 0;
int ivalueofminv = 0, ivalueofmaxv = 0;

for(int i = 0; i < total; i++)
{
    flow_data* p = &dataset[i];

    if ( p->uvalue > maxvalueu)
    {
        maxvalueu = p->uvalue;
        ivalueofmaxu = i;
    }

    if ( p->uvalue < minvalueu)
    {
        minvalueu = p->uvalue;
        ivalueofminu = i;
    }

    if ( p->vvalue > maxvaluev)
    {
        maxvaluev = p->vvalue;
        ivalueofmaxv = i;
    }

    if ( p->vvalue < minvaluev)
    {
        minvaluev = p->uvalue;
        ivalueofminv = i;
    }

    printf("%.7f, %.7f, %.7f, %.7f\n", p->xvalue, p->yvalue, p->vvalue, p->uvalue);
}

flow_data* z = &dataset[ivalueofmaxu];
printf("Max of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofminu];
printf("Min of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofmaxv];
printf("Max of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofminu];
printf("Min of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);
float minvalueu=100000,maxvalueu=0;
浮点最小值V=100000,最大值V=0;
int ivalueofminu=0,ivalueofmaxu=0;
int-ivalueofminv=0,ivalueofmaxv=0;
对于(int i=0;iU值>最大值)
{
maxvalueu=p->U值;
ivalueofmaxu=i;
}
如果(p->U值U值;
ivalueofminu=i;
}
如果(p->V值>最大值)
{
maxvaluev=p->V值;
ivalueofmaxv=i;
}
如果(p->V值<最小值V)
{
minvaluev=p->U值;
ivalueofminv=i;
}
printf(“%.7f、%.7f、%.7f、%.7f、%.7f\n”,p->xvalue,p->yvalue,p->vvalue,p->uvalue);
}
flow_data*z=&dataset[ivalueofmax];
printf(“U-%.7f、%.7f、%.7f、%.7f、%.7f、%.7f\n的最大值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);
z=&dataset[ivalueofminu];
printf(“U-%.7f、%.7f、%.7f、%.7f、%.7f\n的最小值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);
z=&dataset[ivalueofmaxv];
printf(“V-%.7f、%.7f、%.7f、%.7f、%.7f\n的最大值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);
z=&dataset[ivalueofminu];
printf(“V-%.7f、%.7f、%.7f、%.7f、%.7f\n的最小值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);

问题最后一个代码块中的全部代码都可以移动到函数中。 该函数的参数将是指向结构
flow\u data
和数组中元素数(
total
)的指针。
该函数将如下所示:

void findAndPrintMaxMinVals(flow_data* dataset, int total)
main()调用

完整代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    float xvalue;
    float yvalue;
    float uvalue;
    float vvalue;
} flow_data;

void findAndPrintMaxMinVals(flow_data* dataset, int total)
{
    float minvalueu = 100000, maxvalueu = 0;
    float minvaluev = 100000, maxvaluev = 0;
    int ivalueofminu = 0, ivalueofmaxu = 0;
    int ivalueofminv = 0, ivalueofmaxv = 0;

    for(int i = 0; i < total; i++)
    {
        flow_data* p = &dataset[i];

        if ( p->uvalue > maxvalueu)
        {
            maxvalueu = p->uvalue;
            ivalueofmaxu = i;
        }

        if ( p->uvalue < minvalueu)
        {
            minvalueu = p->uvalue;
            ivalueofminu = i;
        }

        if ( p->vvalue > maxvaluev)
        {
            maxvaluev = p->vvalue;
            ivalueofmaxv = i;
        }

        if ( p->vvalue < minvaluev)
        {
            minvaluev = p->uvalue;
            ivalueofminv = i;
        }

        printf("%.7f, %.7f, %.7f, %.7f\n", p->xvalue, p->yvalue, p->vvalue, p->uvalue);
    }

    flow_data* z = &dataset[ivalueofmaxu];
    printf("Max of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

    z = &dataset[ivalueofminu];
    printf("Min of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

    z = &dataset[ivalueofmaxv];
    printf("Max of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

    z = &dataset[ivalueofminu];
    printf("Min of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);  
}


int main() {    

    int total = 4; //total no of datasets for example
    int i;
    flow_data d;
    flow_data* dataset = NULL;

    dataset = (flow_data*)malloc(sizeof(flow_data) * total); //memory for 4 elements for testing

    //Generate values and fill in
    for(i = 0; i < total; i++) {
        dataset[i].xvalue = (i+1) * 7;
        dataset[i].yvalue = (i+1) * 8;
        dataset[i].uvalue = (i+1) * 9;
        dataset[i].vvalue = (i+1) * 10;
    }   
    findAndPrintMaxMinVals(dataset, total); 
}
#包括
#包括
类型定义结构{
浮点数;
浮动Y值;
浮动价值;
浮动价值;
}流动数据;
void findAndPrintMaxMinVals(流量数据*数据集,整数合计)
{
浮点最小值U=100000,最大值U=0;
浮点最小值V=100000,最大值V=0;
int ivalueofminu=0,ivalueofmaxu=0;
int-ivalueofminv=0,ivalueofmaxv=0;
对于(int i=0;iU值>最大值)
{
maxvalueu=p->U值;
ivalueofmaxu=i;
}
如果(p->U值U值;
ivalueofminu=i;
}
如果(p->V值>最大值)
{
maxvaluev=p->V值;
ivalueofmaxv=i;
}
如果(p->V值<最小值V)
{
minvaluev=p->U值;
ivalueofminv=i;
}
printf(“%.7f、%.7f、%.7f、%.7f、%.7f\n”,p->xvalue,p->yvalue,p->vvalue,p->uvalue);
}
flow_data*z=&dataset[ivalueofmax];
printf(“U-%.7f、%.7f、%.7f、%.7f、%.7f、%.7f\n的最大值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);
z=&dataset[ivalueofminu];
printf(“U-%.7f、%.7f、%.7f、%.7f、%.7f\n的最小值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);
z=&dataset[ivalueofmaxv];
printf(“V-%.7f、%.7f、%.7f、%.7f、%.7f\n的最大值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);
z=&dataset[ivalueofminu];
printf(“V-%.7f、%.7f、%.7f、%.7f、%.7f\n的最小值”,z->xvalue,z->yvalue,z->vvalue,z->uvvalue);
}
int main(){
int total=4;//例如,数据集的总数
int i;
数据流;
flow_data*dataset=NULL;
dataset=(flow_data*)malloc(sizeof(flow_data)*总计);//用于测试的4个元素的内存
//生成值并填写
对于(i=0;i
是的,您可以将结构传递给函数,但在您的情况下,将指向结构的指针传递给函数而不是整个结构可能更有效。您的算法并不是特别低效,这是最简单的方法。从第一个结构初始化最小值和最大值会更安全,例如
float minvalueu=dataset[0]。uvalue。然后在
i=1
处启动
for
循环。如何管理重复?如果“值”在索引3和5上,预期结果是什么?实际上我没有想到,但数据的性质不会有任何重复。这给了我一个错误:函数“maxveldiff”的参数太多这意味着传递给函数的参数数量大于函数定义中的参数数量。你在按照我在回答中的建议做吗?什么是“maxveldiff”?我刚刚重命名了函数。准确地复制了你所说的,我在发布答案之前做了测试。它应该可以工作。我想,因为我在不同的文件中使用了一个头函数,前面的头文件是-void maxveldiff(const char*flow_file);你认为现在应该是什么
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    float xvalue;
    float yvalue;
    float uvalue;
    float vvalue;
} flow_data;

void findAndPrintMaxMinVals(flow_data* dataset, int total)
{
    float minvalueu = 100000, maxvalueu = 0;
    float minvaluev = 100000, maxvaluev = 0;
    int ivalueofminu = 0, ivalueofmaxu = 0;
    int ivalueofminv = 0, ivalueofmaxv = 0;

    for(int i = 0; i < total; i++)
    {
        flow_data* p = &dataset[i];

        if ( p->uvalue > maxvalueu)
        {
            maxvalueu = p->uvalue;
            ivalueofmaxu = i;
        }

        if ( p->uvalue < minvalueu)
        {
            minvalueu = p->uvalue;
            ivalueofminu = i;
        }

        if ( p->vvalue > maxvaluev)
        {
            maxvaluev = p->vvalue;
            ivalueofmaxv = i;
        }

        if ( p->vvalue < minvaluev)
        {
            minvaluev = p->uvalue;
            ivalueofminv = i;
        }

        printf("%.7f, %.7f, %.7f, %.7f\n", p->xvalue, p->yvalue, p->vvalue, p->uvalue);
    }

    flow_data* z = &dataset[ivalueofmaxu];
    printf("Max of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

    z = &dataset[ivalueofminu];
    printf("Min of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

    z = &dataset[ivalueofmaxv];
    printf("Max of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

    z = &dataset[ivalueofminu];
    printf("Min of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);  
}


int main() {    

    int total = 4; //total no of datasets for example
    int i;
    flow_data d;
    flow_data* dataset = NULL;

    dataset = (flow_data*)malloc(sizeof(flow_data) * total); //memory for 4 elements for testing

    //Generate values and fill in
    for(i = 0; i < total; i++) {
        dataset[i].xvalue = (i+1) * 7;
        dataset[i].yvalue = (i+1) * 8;
        dataset[i].uvalue = (i+1) * 9;
        dataset[i].vvalue = (i+1) * 10;
    }   
    findAndPrintMaxMinVals(dataset, total); 
}