不能在嵌套结构中使用联合元素作为 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.
中的建议
我在将 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.