Rzutowanie z int do char
Ostatnio zmodyfikowano 2010-07-22 18:19
MAKONDE Temat założony przez niniejszego użytkownika |
Rzutowanie z int do char » 2010-07-22 17:20:34 Witam wszystkich...mój problem polega na tym co napisałem w temacie... robię takie coś : a = 'X'; static_cast < char >( a );
wie ktoś może co robię źle? ps. Mogę zamieścić kod programu ale...nie rozczytacie mnie ;D |
|
michalp |
» 2010-07-22 17:31:30 Chyba raczej: char x = static_cast < char >( a ); |
|
MAKONDE Temat założony przez niniejszego użytkownika |
» 2010-07-22 17:45:51 chyba mnie nie zrozumiałeś...'X' to litera a nie zmienna... |
|
michalp |
» 2010-07-22 17:53:55 Operator static_cast zwraca wartość typu docelowego. Nie zmienia obiektu przekazanego jako argument (jak by wynikało z twojego kodu). A więc to ty nie zrozumiałeś (ani mnie ani operatora static_cast). Identyfikator zmiennej (ja użyłem x) może być dowolny. Jeżeli ci to przeszkadza to po prostu napisz: char zmienna = static_cast < char >( a ); Pisząc: static_cast < char >( a ); Nie uzyskasz żadnych efektów bo olewasz zwracaną wartość. |
|
MAKONDE Temat założony przez niniejszego użytkownika |
» 2010-07-22 18:00:14 #include <iostream>
int main() { int a = 88; std::cout << static_cast < char >( a ); std::cout << "\n" << static_cast < int >( a ); std::cin.get(); return 0; }
mhm...skompiluj to sobie...i zobacz jak działa... game.h #include <string> enum LEVEL { LVL_EASY = 49, LVL_NORMAL, LVL_DIFFICULT }; enum CHOICE { ICE_CIRCLE = 1, ICE_CROSS, ICE_FIELD = 3 }; enum STATE { STA_WON, STA_MOVE, STA_DRAW }; enum RUCH { RH_1 = 49, RH_2, RH_3, RH_4, RH_5, RH_6, RH_7, RH_8, RH_9 }; typedef int MAPS; LEVEL LVL;
std::string kolo = "kolko"; std::string krzyz = "krzyzyk";
bool game = true; bool plansza = false; int Poziom(); int Kto_zaczyna(); int Pole(); int nr_Pola; struct DANE { int Poziom_Trudnosci; std::string Ktozaczyna; std::string Drugaosoba; }; DANE Wskaznik;
main.cpp #include"game.h" #include<iostream> #include <conio.h> #include <ctime> const MAPS Arrary1 = 3; const MAPS Arrary2 = 3; int nPoziom; int poczatek; int g_poczatek; int a = 1; int b = 2; int c = 3; int d = 4; int e = 5; int f = 6; int h = 7; int l = 8; int g = 9; int main() { std::cout << "Wybierz poziom trudnosci.\n1.Latwy\n2.Normalny\n3.Trudny"; while( game == true ) { switch( Poziom() ) { case LVL_EASY: std::cout << "\nPoziom Latwy\n\n"; game = false; break; case LVL_NORMAL: std::cout << "\nPoziom Normalny\n\n"; game = false; break; case LVL_DIFFICULT: std::cout << "\nPoziom Trudny\n\n"; game = false; break; } } Wskaznik.Poziom_Trudnosci = LVL; system( "cls" ); Kto_zaczyna(); _getch(); system( "cls" ); while( true ) { std::cout << a << b << c << "\n" << d << e << f << "\n" << h << l << g; if( poczatek < 50 ) { if( g_poczatek < 50 ) { std::cout << "\n\nWybierz pole w ktorym chcesz postawic " << Wskaznik.Ktozaczyna << ":"; } else { std::cout << "\n\nWybierz pole w ktorym chcesz postawic " << Wskaznik.Drugaosoba << ":"; } switch( Pole() ) { case RH_1: a = 88; static_cast < char >( a ); system( "cls" ); poczatek = 75; continue; break; case RH_2: break; case RH_3: break; case RH_4: break; case RH_5: break; case RH_6: break; case RH_7: break; case RH_8: break; case RH_9: break; } } else { if( g_poczatek > 50 ) { std::cout << "\n\nWybierz pole w ktorym chcesz postawic " << Wskaznik.Ktozaczyna << ":"; } else { std::cout << "\n\nWybierz pole w ktorym chcesz postawic " << Wskaznik.Drugaosoba << ":"; } switch( Pole() ) { case RH_1: a = 88; a = static_cast < char >( 88 ); system( "cls" ); poczatek = 25; continue; case RH_2: break; case RH_3: break; case RH_4: break; case RH_5: break; case RH_6: break; case RH_7: break; case RH_8: break; case RH_9: break; } } } std::cin.get(); return 0; }
int Poziom() { LVL = static_cast < LEVEL >( getch() ); return LVL; } int Kto_zaczyna() { srand( static_cast < unsigned int >( time( NULL ) ) ); poczatek = rand() % 100 + 1; if( poczatek < 50 ) { std::cout << "Zaczyna " << krzyz; Wskaznik.Ktozaczyna = krzyz; Wskaznik.Drugaosoba = kolo; } else { std::cout << "Zaczyna " << kolo; Wskaznik.Ktozaczyna = kolo; Wskaznik.Drugaosoba = krzyz; } g_poczatek = poczatek; return poczatek; } int Pole() { RUCH nr_Pola = static_cast < RUCH >( getch() ); return nr_Pola; }
a skompiluj to i zobacz że coś mi nie działa rzutowanie w instrukcji switch... wiem...brzydko zrobione bez komentarzy, wiele nie wykorzystanych zmiennych itd. nikomu nie karze analizować tego kodu |
|
michalp |
» 2010-07-22 18:07:13 Napisałem wyraźnie:Operator static_cast zwraca wartość typu docelowego. Nie zmienia obiektu przekazanego jako argument (jak by wynikało z twojego kodu). A więc powtórzę jeszcze raz: Pisząc: static_cast < char >( a ); Nie uzyskasz żadnych efektów bo olewasz zwracaną wartość. |
|
MAKONDE Temat założony przez niniejszego użytkownika |
» 2010-07-22 18:12:09 ok...powiedzmy że ten błąd był przypadkowy(bo był) ale niżej już... a = 88; a = static_cast < char >( 88 );
za 88 wstaw sobie a jak było wcześniej jeśli chcesz...pomimo to nadal to mi nie działa |
|
michalp |
» 2010-07-22 18:16:12 Jeżeli a jest typu int to jak chcesz tam przypisać wartość typu char? To nielogiczne prawda? Radzę ci najpierw dokładniej zrozumieć istotę rzutowania i typów w C++. |
|
« 1 » 2 |