Форум программистов, компьютерный форум CyberForum.ru

Union - C++

Восстановить пароль Регистрация
 
NikitaQ
5 / 5 / 1
Регистрация: 10.09.2013
Сообщений: 51
04.11.2013, 17:21     Union #1
Здравствуйте! Я уже задавал тут вопрос, как использовать union, и сейчас столкнулся с проблемой:
Есть 3 файла и заголовочный файл - Struct.h Дальше довольно много текста, но, плиз, помогите кто-нибудь=)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const int MaxFigures = 12;
 
struct Point {
    double X;    // Координата X точки
    double Y;    // Координата Y точки
} Points;
 
union Figure {
    struct Rectangle {
        Point UpperLeft;    // Координаты верхнего левого угла
        Point LowerRight;   // Координаты нижнего правого угла
    } Rectangles;
    
    struct Circle {
        Point Center;    // Координаты центра
        double radius;   // Радиус
    } Circles;
} q;
 
Figure Figures[MaxFigures];
main.cpp
C++
1
2
3
4
5
6
7
int LoadFigures();
int main() {
 
    int numFigures = 0;
    
    numFigures = LoadFigures(); // Считываем все фигуры
}
LoadFigures.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
void CreateFigure (char, int);
 
int LoadFigures() {
    char id;
    int numFigures = 0;
    
    while (1) {
        cin >> id;
        if(id == '*')
            break;
        
        numFigures++;
        
        CreateFigure(id, numFigures); // Инициализация структуры
    }
    return numFigures;
}
CreateFigures.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Struct.h"
#include <iostream>
using namespace std;
 
void CreateFigure (char id, int i) {
    if (id == 'c') {
        cin >> Figures[i].Circles.Center.X >> Figures[i].Circles.Center.Y >> Figures[i].Circles.radius;
    }
   
    if (id == 'r') {
        cin >>  Figures[i].Rectangles.UpperLeft.X >> Figures[i].Rectangles.UpperLeft.Y >> Figures[i].Rectangles.LowerRight.X >> Figures[i].Rectangles.LowerRight.Y;
    }
    
    // Debugging
    cout << id << i << " Center.X " << Figures[i].Circles.Center.X << "| Center.Y " << Figures[i].Circles.Center.Y << "| radius " << Figures[i].Circles.radius << endl;
    
    cout << id << i << " UpperLeft.X " << Figures[i].Rectangles.UpperLeft.X << "| UpperLeft.Y " << Figures[i].Rectangles.UpperLeft.Y << "|  LowerRight.X " << Figures[i].Rectangles.LowerRight.X << "| LowerRight.Y " << Figures[i].Rectangles.LowerRight.Y << endl;   
}
Так вот, если дать строку
r 8.5 17.0 25.5 -8.5
*
То он выведет
r1 Center.X 8.5| Center.Y 17| radius 25.5
r1 UpperLeft.X 8.5| UpperLeft.Y 17| LowerRight.X 25.5| LowerRight.Y -8.5

Каак? Как он обходит условия if? И как исправить?

Должен вывести только вторую строку, естественно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 17:21     Union
Посмотрите здесь:

C++ Объединения (union)
Union C++
union с методами C++
Union C++
Union - Объединения C++
C++ Управляемый value union
обьединения union C++
Union, struct C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EfimenkoFedor
0 / 0 / 1
Регистрация: 29.09.2012
Сообщений: 59
04.11.2013, 17:48     Union #2
потому что это union, он так хранит данные
NikitaQ
5 / 5 / 1
Регистрация: 10.09.2013
Сообщений: 51
04.11.2013, 18:04  [ТС]     Union #3
Разве так? Он не должен был одну строку вывести?
Yandex
Объявления
04.11.2013, 18:04     Union
Ответ Создать тему
Опции темы

Текущее время: 01:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru