首页 > 解决方案 > 确定用户输入值的数据类型

问题描述

我正在阅读创建混合数据类型的“联合”应用程序之一。例子

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 语言中是否有任何方法可以让编译器自动检测用户输入的数据类型,并在scanf没有用户帮助的情况下运行第一条或第二条语句?或者库中是否存在任何预定义的函数来执行此操作?

还要告诉您是否有其他有趣的方式来执行此程序。

标签: cstructureunionunionsunion-types

解决方案


这可能对你有帮助,我猜...

float num;
printf("Enter number\n");
scanf("%f",&num);
if((num - (int)num)== 0) //(int)num : Type casting
    printf("Entered number is of int type\n");
else
    printf("Entered number is of float type\n");

推荐阅读