[c++]użycie unii

Odpowiedz Nowy wątek
2011-12-08 23:38
0

Jasiu wymyślił pewien specyficzny, informatyczny plecak. Polega on na tym, że w swoim plecaku zainstalował kawałek pamięci RAM i wrzucenie czegoś do niego traktuje jak zapisanie wartości w tej pamięci.
I tak Jaś wrzucił do plecaka pewną liczbę rzeczywistą. Teraz w zależności od okoliczności, kiedy ktoś go spyta co ma w plecaku, odpowiada w zależności od tego, co kto chce usłyszeć ;) Jeśli ktoś go zapyta np. o liczbę całkowitą, odpowiada, jakby w plecaku miał zapisaną liczbę całkowitą itp.

Wejście

Pierwsza linia wejścia składa się z jednej liczby rzeczywistej x oznaczającej liczbę, którą Jaś wrzuca do plecaka.
Następna linia zawiera jedną liczbę całkowitą n (1<= n <= 1000) oznaczającą liczbę osób, które odpytują Jasia.
Kolejne n linii zawiera opis typów, o które pytają kolejne osoby. Mogą to być: int, long, float, double (uwaga - napis "long" odpowiada typowi "long long").

Wyjście

Dla każdego zapytania należy wypisać odpowiednią wartość.

Przykład

Wejście:
3.14
4
int
long
float
double

Wyjście:
1078523331
1078523331
3.140000
0.000000

Moje rozwiązanie coś kuleje, bo nie chce od razu wyświetlać, wyniku przy 4 powt. a przy 1 wyświetla, będę wdzięczny za każdą pomoc.

#include <cstdlib>
#include <iostream>

using namespace std;

union u
{
    int a;
    long long b;
    float c;
    double d;
};

int main()
{
    u zm;
    int n=0;
    char typ[7];
    cin>>zm.c;
    cin>>n;
    for (int i=0; i<n; i++)
        cin>>typ;
        if(strcmp(typ,"int")==0)
        cout<<zm.a<<endl;
        else if(strcmp(typ,"long")==0)
        cout<<zm.b<<endl;
        else if(strcmp(typ,"float")==0)
        cout<<zm.c<<endl;
        else if(strcmp(typ,"double")==0)
        cout<<zm.d<<endl;
    return 0;
}
edytowany 5x, ostatnio: kruczek23, 2011-12-08 23:40
Dlaczego dla 3.14 i double miałoby się wyświetlić 0.0? - Endrju 2011-12-08 23:59

Pozostało 580 znaków

2011-12-09 00:05
0

już mi się udało zrobić. ale muszę zamienić to na c. czy jest mi ktoś w stanie pomóc przy tych cout ach i cin do elementu unii, bo coś zwykły scanf nie chce przejść.

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <string.h>

using namespace std;

union u
{
    int a;
    long b;
    float c;
    double d;
};

int main()
{
    u zm;
    int n=0;
    char typ[7];
    cin>>zm.c;
    cin>>n;
    for (int i=0; i<n; i++){
        cin>>typ;
        if(strcmp(typ,"int")==0)
        cout<<fixed<< setprecision(6) << zm.a <<endl;
        else if(strcmp(typ,"long")==0)
        cout<<fixed<< setprecision(6) << zm.b <<endl;
        else if(strcmp(typ,"float")==0)
        cout<<fixed<< setprecision(6) << zm.c <<endl;
        else if(strcmp(typ,"double")==0)
        cout<<fixed<< setprecision(6) << zm.d <<endl;
    }
    return 0;
}
edytowany 7x, ostatnio: kruczek23, 2011-12-09 01:17

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0