• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konwersja int na char

Object Storage Arubacloud
0 głosów
1,927 wizyt
pytanie zadane 20 sierpnia 2015 w C i C++ przez Jonki Dyskutant (8,180 p.)
edycja 20 sierpnia 2015 przez Jonki

Chcę zrobić tak, aby po wcisnięciu 'enter` do zmiennej PIN_do_rejestracji typu int wychodziło z pętli.

char ESC = static_cast<char>(PIN_do_rejestracji);

        if(ESC == '27')
        {
            break;
        }

To nie działa i nie wiem jak to zrobić.

6 odpowiedzi

0 głosów
odpowiedź 20 sierpnia 2015 przez Lafoniz Gaduła (4,370 p.)
Nie ma takiego znaku jak '27'.
komentarz 20 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
A to tutaj nie pokazuje, że chcę zmienną ESC porównać z numerem 27 z kodu ASCII czyli 'ESC'?
komentarz 20 sierpnia 2015 przez Lafoniz Gaduła (4,370 p.)

Twój kompilator nie pokazał Ci ostrzeżenia przy tym kodzie?

Mój przykładowo od razu wypisał:

warning: multi-character character constant [-Wmultichar]|

 

komentarz 20 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
Tak, pokazuje. Ale nie wiem jak zrobić, aby użutkownika po wcisnięciu 'enter' wywalało z pętli.
komentarz 20 sierpnia 2015 przez Krawiec91 Pasjonat (19,600 p.)
Tutaj nie porównujesz z liczbą 27 (kod ascii ESC) tylko z czymś, nawet nie wiem jak to określić. Ani to pojedyńczy znak char ani string bo nie jest w cudzysłowie.
0 głosów
odpowiedź 20 sierpnia 2015 przez niezalogowany
Hm, może daj pełny kod, bo nie wiem, czy robisz to w SFML-u (bo w SFML-u używa się podobnego sposobu), czy po prostu normalny program ;)
komentarz 20 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
Normalny programik w konsoli.
komentarz 20 sierpnia 2015 przez niezalogowany
No to w takim razie jak chcesz sprawdzić czy właśnie Escape został wciśnięty? O_o Bo wpisując taką linijkę to nic nie da. Aha! I miałeś dać cały kod, bo i tak dalej nie wiem o co chodzi ;)
0 głosów
odpowiedź 20 sierpnia 2015 przez Krawiec91 Pasjonat (19,600 p.)
Rzutowanie int na char, za wiele nie zmienia pod względem przechowywanych danych. Co najwyżej obetnie starsze bajty ze zmiennej typu int. A co do ESC to spróbuj porównać z 27, bo to jest kod ASCII przycisku ESC.
komentarz 20 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
Powaliło mi się. Miał być enter czyli z kodu ASCII 13.
komentarz 20 sierpnia 2015 przez Krawiec91 Pasjonat (19,600 p.)
No to 13 zamiast 27, tylko bez cudzysłowów. Zmienną char możesz sobie normalnie porównać z liczbą (np. kodem znaku). Dla wygody programisty są znaki w apostrofach, a dla komputera to i tak jeden pies, bo i tak to przechowuje jako liczbę.
0 głosów
odpowiedź 20 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)

Użyj standartowych funkcji języka C:

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cstring>

using namespace std;


int main()
{
    int PIN_do_rejestracji;
    cout << "podaj liczbe" << endl;
    cin >> PIN_do_rejestracji;
    char tab[10];
    char* ESC = itoa(PIN_do_rejestracji, tab,10);  //funkcja konwertuje int na string tab jest do ewentualnego błędu

        if(strcmp(ESC, "27") == 0)          //jeśli zwraca 0 to cstringi są taki same
        {
            cout << "it works";
        }
}

 

0 głosów
odpowiedź 20 sierpnia 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)
if(ESC == '27')

Domyślam się co chcesz tutaj osiagnąć :D
Jesteś blisko, ale to nadal nie to. Chcąc porównać char z intem możesz to zrobić po prostu tak:

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
	char c = ' ';
	if( c == 32 )
		cout << "SPACJA!" << endl;

	system( "pause" );
	return 0;
}

A jeśli chcesz wypisać znak, który podasz jako kod z ASCII to można tak:

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
	// Kod znaku spacji 32
	cout << "SPACJA: '" << static_cast<char>(32) << "'" << endl;

	// Można też stałą dosłowną. Kod 32 szesnastkowo.
	cout << "SPACJA: '" << '\x20' << "'" << endl;

	system( "pause" );
	return 0;
}

Pozdrawiam :-)

0 głosów
odpowiedź 20 sierpnia 2015 przez jegor377 Stary wyjadacz (13,230 p.)

porównujesz kod z kodem. wszystko co jest w '' to podczas kompilacji zwraca numer ascii znaku, wszystko co jest w "" zwraca tablicę numerów ascii (charów). W '' możesz podać tylko 1 znak. Jeżeli chcesz żeby kompilator to skompilował to musisz napisać:

if(ESC == 27) break; // 27 to numer znaku
komentarz 20 sierpnia 2015 przez jegor377 Stary wyjadacz (13,230 p.)

możesz również sprawdzić bardzo łatwo jaki znak posiada jaki numer ;) Zobacz. Do zapisywania znaków używamy zmiennej typu char (8 bitów, 1 bajt), tablica ascii posiada 256 znaków, czyli dokładnie tyle ile liczb można zapisać na 1 bajcie czyli 1 charze. Więc aby poznać pod jakim numerem jest jaki znak, wystarczy przelecieć wszystkie znaki 0 - 255. :D Tak więc kod będzie wyglądał tak:

for(unsigned char i=0; i<=255; i++) cout<<static_cast<short>(i)<<" "<<i<<endl;

lub też

typedef unsigned char uchar;

for(uchar i=0; i<=255; i++) cout<<(short)(i)<<" "<<i<<endl;
                                                                                 ^
                                                                                 |
 zauważ, że w tej linijce jest "", co oznacza, że to jest CIĄG ZNAKÓW, a nie jeden znak.

Zaś typedef unsigned char uchar; oznacza definicję nowego typu, który nazwałem sobie uchar, żeby skrócić i nie pisać "unsigned char" :)

 

Podobne pytania

0 głosów
1 odpowiedź 699 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
0 głosów
2 odpowiedzi 849 wizyt
pytanie zadane 11 września 2016 w C i C++ przez rubiikk Obywatel (1,900 p.)
0 głosów
2 odpowiedzi 6,362 wizyt
pytanie zadane 9 czerwca 2016 w C i C++ przez Mavimix Dyskutant (8,390 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...