不能在嵌套结构中使用联合元素作为 scanf() 的参数来存储所需的值

Can´t use an union element inside a nested structure as argument for scanf() to store desired value

我在将 scanf 与联合元素一起用作参数时遇到问题,该联合元素是嵌套结构的一部分。

#include <stdio.h>
int main()
{
    typedef union { float chair; int bed; } HABITATION;
    typedef struct { HABITATION room; int number; } HOUSE;

    scanf("%d",&HOUSE.room.bed);
}

编译器的错误消息是: "Error: expected expression before ) >>ROOF<<"。

我做错了什么?

信息: 我目前使用 C,但我也对 C++ 中的相同操作和答案感兴趣。

我不懂 C,但在 C++ 中你的代码应该等同于:

#include <stdio.h>

union HABITATION { float chair; int bed; };
struct HOUSE { HABITATION room; int number; };

int main()
{
    scanf("%d",&HOUSE.room.bed);
}

也许现在很明显你只定义了两种类型,但你从未在这段代码中创建任何东西的实例。 HOUSE 是类型而不是实例。

在 C++ 中你会这样做

#include <iostream>

int main()
{
   HOUSE h; 
   std::cin >> h.room.bed;
}

并且可能不会使用所有大写名称。有些人将它们用于全局变量,我更倾向于完全禁止它们。名字应该不言而喻,无需大声疾呼。 House 如果您对 类 使用首字母大写并且对实例使用所有小写字母(例如 house),那么 House 就足够清楚了。这也是 Stroustrup 在 his guideline.

中的建议