-1

私はCプログラミングの初心者で、プログラムを作成しているinput();ときに、中かっこで指定された変数名が次のように入力されるように、ユニバーサル入力関数を作成できるかどうか疑問に思いました。

input(a);

結果:
a の値を入力: 10

今(入力後)次のようなプログラムでこのように書くと:

#include<stdio.h>
main()
{
    int a;
    float b;
    char c;
    input (a);
    printf("value of a = %d\n",a);  // 1
    input(b);
    input(c);
    printf("value of b = %f\n",b);  // 2
    printf("c = %c\n",c);           // 3
}

出力は次のようになり
ます。
enter value of a: 10
***value of a = 10***
enter value of b: 10.0
enter value of c: D
***value of b = 10.000000***
***c = D***

つまり、関数パラメータは、関連する変数のタイプ (char、float、int など) に応じた値を取る必要があります。たとえば、achar の場合、入力された値はaそれに応じて保存されます。構造体を使って実装しようと思ったのですが、渡された実際のパラメーターinput();を構造体メンバーと リンクする方法を考えることができません

更新printf(): a、b、およびcの値が対応する型に適切に/正しく格納されていることを示すために、行1、2、および3(コメント:関数)を書きました

4

1 に答える 1

2

あなたが書いたのと文字通り同じ構文で-いいえ、これにはC++機能が必要です(関数のオーバーロード)が、内部的には異なる関数のセットを使用するだけであることを知っておく価値があるため、実際にはinput_int、input_charとほぼ同じですなど

ユニオン (おそらく構造体内のユニオン - 実際の型をどこかに保存する必要があります) を使用できますが、それはまったく異なるアプローチです。

マクロ (特に、C11 の機能を使用できる場合は C11 _Generic のマクロ) も良い代替手段になる可能性があります。

于 2013-09-20T08:15:52.867 に答える