1

我对c编程很陌生。我已经写了休闲代码

 float value;  //golbal variable
 unsigned int data; //golbal variable

 void Maxphase(void) 
 { 
  float  MAX = 0.0;
   unsigned int i,index;
 for (i=0;i<=360;i++) 
 {              
    phaseset(i); 
    data = readvalue(); 
    value = voltage(data);    
    if(value>MAX)   //find max value 
    { 
      MAX = value;    //max voltage 
      index = i;   
     }  
  }                          
    printf("Max Voltage Value:%f\r\n", MAX); 
    printf("Related index Value:%d\r\n", index); 
} 

上面的代码完美地工作并打印最大电压和指数。我想从此函数返回值“Max”和“index”,我必须将 Max 值保存在一个变量中,并将索引值保存在其他变量中,例如。

void runCom(void){ 
     c=getchar();
 switch(c){ 
    case '1': 
           Maxphase();
          Vin= (I want to store MAX value of that function)
          p1= ( I want to store Index of that function)
          break; 
    default:
         break;
    }
  }

实际上我想调用那个函数,它必须返回两个变量 MAX 和索引值,因此我想将这两个值存储在不同的变量中。

我知道函数不能返回两个值。

我已经搜索过,我发现可以使用结构或使函数使用指针来处理参数。我尝试使用 struct ,如下所示。

typedef struct {
   float v;
   unsigned int p;
  }volphase;

我已经在头文件中声明了这个结构。我在我调用的所有文件中都包含了这个头文件。

volphase Maxphase()
{
   volphase vp;
float  MAX = 0.0;
   unsigned int i,index;
 for (i=0;i<=360;i++) 
 {              
    phaseset(i); 
    data = readvalue(); 
    value = voltage(data);    
    if(value>MAX)   //find max value 
    { 
      MAX = value;    //max voltage 
      index = i;   
     }  
  }                          
   vp.v=MAX;
   vp.p=index; 
   return vp;
  } 

这是写在“bvr.c”文件中的。但我正在考虑如何在 case'1'(main.c) 中调用这个“结构”,以及如何将 vp.v 存储在一个变量中,将 vp.p 存储在另一个变量中。

如果在编写结构中有任何问题,请建议我。或任何其他将返回两个值的最简单方法。

请帮助我如何做到这一点。

4

4 回答 4

3

从函数返回 astruct是返回多个值的两种方法中最不常见的一种。使用指针更常见:

void Maxphase(float *max, unsigned int *index) 
{
    *max = 0.0;
    float value;
    unsigned int i, data;
    for (i=0;i<=360;i++) 
    {              
        phaseset(i); 
        data = readvalue(); 
        value = voltage(mux1);    
        if(value > *max)   //find max value 
        { 
            *max = value;    //max voltage 
            *index = i;   
        }  
    }                          
    printf("Max Voltage Value:%f\r\n", *max); 
    printf("Related index Value:%d\r\n", *index); 
}

以下是调用此函数的方法:

int main() {
    float max;
    unsigned idx;
    Maxphase(&max, &idx);
    printf("Max Voltage Value:%f\r\n", max); 
    printf("Related index Value:%d\r\n", idx); 
    return 0;
}
于 2012-11-06T21:47:42.067 回答
1

我会从函数返回相位 - 函数名称是 MaxPhase,这意味着它返回一个最大相位值。可以使用指针返回找到最大值的索引。

请注意,该data值未使用且未mux1定义。另请注意,我使用idx而不是index后者有时已经在标准库中定义(尽管可能不在您的库中)。

float MaxPhase(int * maxindex)
{
    float max = 0.0;
    int idx = -1;

    for (int i=0; i<=360; i++) {
        phaseset(i);
        unsigned int data = readvalue();
        float value = voltage(mux1);
        if (value > max) {
            max = value;
            idx = i;
        }
    }
    *maxindex = idx;
    return max;
}

void caller(void)
{
    int idx = 0;
    float phase = MaxPhase(&idx);

    printf("Max Voltage Value:%f\n", phase);
    printf("Related index Value:%d\n", idx);

    ...
}
于 2012-11-06T21:58:11.920 回答
1
#include <stdio.h>

struct lol
{
    float val;
    int ind;
};

void olol(struct lol *lol1)
{
    lol1->val = 5;
    lol1->ind = 3;
}

int main(void) {
    struct lol mylol = {0,0};
    olol(&mylol);
    printf("lololol %f %d \n", mylol.val, mylol.ind);
    printf("lol\n");
    return 0;
}
于 2012-11-06T21:58:32.083 回答
0

您可以通过几种不同的方式解决此问题:

1.定义一个包含两个值的结构并返回该结构。

#include <stdlib.h>
struct Values {
  int v1, v2;
};
struct Values *get2Values () {
  struct Values *x=(struct Values*)malloc (sizeof (struct Values));
  x->v1=1;
  x->v2=1231;
  return x;
}

瞧,如果您不正确处理返回值,则会发生内存泄漏...

2.使用指针作为值的参数,例如指针:

void get2Values (int *v1, int *v2) {
  *v1=1;
  *v2=131231;
 }
 int main () {
   int a1, a2;
   get2Values (&a1, &a2);
 }

祝你好运!

于 2012-11-06T21:56:21.423 回答