我是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);
}
以上代码完美运行并打印最大电压和指数。我想要返回两个值&#34; Max&#34;和&#34;索引&#34;从这个函数,我必须将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或者使用函数来处理带有指针的参数。我尝试使用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;
}
这是用&#34; bvr.c&#34;文件。 但我在想如何称呼这个&#34; struct&#34;如果&#39; 1&#39;(main.c)以及如何将vp.v存储在一个变量中,将vp.p存储在另一个变量中。
如果写struct有任何问题,请建议我。或任何其他最简单的方法,将返回两个值。
请帮我解决这个问题。
答案 0 :(得分:3)
从函数返回struct
是返回多个值的两种方法中最不常见的。使用指针更常见:
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;
}
答案 1 :(得分:1)
我会从函数返回阶段 - 函数名称是MaxPhase,这意味着它返回一个最大阶段的值。可以使用指针返回找到max的索引。
请注意,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);
...
}
答案 2 :(得分: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;
}
答案 3 :(得分: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);
}
祝你好运!