私は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 値を 1 つの変数に保存し、Index 値を別の変数に保存する必要があります。
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;
}
}
実際には、その関数を呼び出して、2 つの変数 MAX とインデックス値を返す必要があるため、これら 2 つの値を異なる変数に格納したいと考えています。
関数が 2 つの値を返せないことはわかっています。
検索したところ、構造体を使用するか、関数を作成して引数をポインターで処理できることがわかりました。以下に示すように、構造体で試しました。
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 を 1 つの変数に格納し、vp.p を別の変数に格納する方法を考えています。
構造体の記述に何か問題がある場合は、私に提案してください。または2つの値を返す他の最も簡単な方法。
これを行う方法を教えてください。