c - 确定用户输入值的数据类型
问题描述
我正在阅读创建混合数据类型的“联合”应用程序之一。例子
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
没有用户帮助的情况下运行第一条或第二条语句?或者库中是否存在任何预定义的函数来执行此操作?
还要告诉您是否有其他有趣的方式来执行此程序。
解决方案
这可能对你有帮助,我猜...
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");
推荐阅读
- javascript - Vuex状态的中间件不更新状态?
- java - 从日期范围获取记录
- vb.net - 在 Visual Studio 中调试 DLL 时看不到本地类变量..?
- apache-spark - 如何迭代“火花”数据框的列?
- javascript - Div Slider 和 Display:Table-Cell 的 JS/CSS 问题
- apache-kafka-streams - Kafka Streams:如何使用 persistentKeyValueStore 从磁盘重新加载现有消息?
- jakarta-ee - MDB 未收到来自消费者的消息
- php - 如何在上一篇文章缩略图中修复“尝试获取非对象的属性”通知
- qt - 如何在 qtwebbrowser 应用程序中添加 tslib 插件?
- c# - Unity runner 游戏的滑动控件