Я читал одно из приложений «Союзов» по созданию смешанных типов данных.Пример
typedef union {
int x;
float y;
}mix;
mix arr[100];
Каждый элемент массива arr[100]
может хранить значение типа int
или float
.Но предположим, что я хочу взять ввод от пользователя и сохранить его в arr[ ]
, и я не буду знать, будет ли пользователь вводить значение float
или int
.Так что я не знаю, какое утверждение из следующего я должен выбрать, чтобы сохранить этот ввод от пользователя.
1. scanf ("%d",&arr[0].x);
ИЛИ
2. scanf ("%f",&arr[0].y);
И аналогичная проблема возникает, когда я хочу напечатать это значение.
Я знаю, что могу решить эту проблему, используя «поле тега» .Так что я могу сделать это как
#include <stdio.h>
typedef union {
int x;
float y;
}mix;
mix arr[100];
int main ()
{
int k; // tag field
puts("Mention 1 if you want to enter integer and 0 if you want to enter float value");
scanf ("%d",&k);
if (k)
{
scanf ("%d",&arr[0].x);
printf ("%d is the entered integer value\n",arr[0].x);
}
else
{
scanf ("%f",&arr[0].y);
printf ("%f is the entered float value\n",arr[0].y);
}
}
Но здесь пользователь сообщает тип данных, которые он собирается ввести (с помощью 0 или 1).Я хочу знать: есть ли способ на языке C, чтобы компилятор мог автоматически определять тип данных, вводимых пользователем, и в соответствии с оператором выполнения 1-го или 2-го scanf
без помощи пользователя? ИЛИ Есть ли в библиотеке предопределенная функция для этого?
Также скажите, есть ли у вас какой-нибудь другой интересный способ сделать эту программу.