Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rzutowanie z int do char

Ostatnio zmodyfikowano 2010-07-22 18:19
Autor Wiadomość
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ś :
C/C++
a = 'X'; //w tym wypadku a powinno wynosić 88
static_cast < char >( a ); //a jest zmienną globalną...rzutuję...potem daje continue; aby pętla znów wyświetliła tekst a tu zamiast X jest 88 :(
wie ktoś może co robię źle?


ps. Mogę zamieścić kod programu ale...nie rozczytacie mnie ;D
P-20081
michalp
» 2010-07-22 17:31:30
Chyba raczej:
char x = static_cast < char >( a );
P-20082
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...
P-20083
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ść.
P-20084
MAKONDE
Temat założony przez niniejszego użytkownika
» 2010-07-22 18:00:14
C/C++
#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
C/C++
#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
C/C++
// kółko.cpp : Defines the entry point for the console application.
#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 ) {
        //LEVEL nPoziom = static_cast<LEVEL>(Poziom());
       
        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 );
                //a = 'X';
                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;
}
//system("cls");

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
P-20087
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ść.
P-20091
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ż...

C/C++
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
P-20092
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++.
P-20093
« 1 » 2
  Strona 1 z 2 Następna strona