Не может использовать элемент union внутри вложенной структуры в качестве аргумента для scanf () для хранения желаемого значения - PullRequest
0 голосов
/ 01 октября 2019

У меня проблема с использованием scanf с элементом union в качестве аргумента, вышестоящее объединение которого является частью вложенной структуры.

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

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

Сообщение об ошибке от компилятора: «Ошибка: ожидаемое выражениедо) >> КРОВЛЯ << ». </p>

Что я сделал не так?

ИНФОРМАЦИЯ: В настоящее время я использую C, но меня также интересует та же операция и ответ в / для C ++.

1 Ответ

3 голосов
/ 01 октября 2019

Я не знаю 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). Это также то, что предлагает Страуструп в своем руководстве .

...