Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Wykrywanie symulacji wciśnięcia klawisza


Rekomendowane odpowiedzi

Opublikowano

Nie wiem czy o to ci chodzi:

#include <iostream>
#include <conio.h>

using namespace std;

int main(){
int znak;
znak = getch();
if(znak == "W"){
cout << "==> W <==" << endl;
} else {
cout << "Nie ma akcji" << endl;
}
return 0;
}

Po wciśnięciu W wyświetli ==> W <==


int o = 1, y = 1;

while(o == y && y < o && o < y){

printf("Co ja tworze....");

}

Opublikowano

Nie wiem czy o to ci chodzi:

#include <iostream>
#include <conio.h>

using namespace std;

int main(){
int znak;
znak = getch();
if(znak == "W"){
cout << "==> W <==" << endl;
} else {
cout << "Nie ma akcji" << endl;
}
return 0;
}

Po wciśnięciu W wyświetli ==> W <==

 

 

int znak;

if(znak == "W"){

cout << "==> W <==" << endl;

 

 

znak == "W" ?? 

 

Jak chcesz zmienną int porównywać z stringiem ?

nostaleh.png
Opublikowano

@GrAvItY1

bo char to jest tez int, ba, zdziwie cie, bool to tez jest int.

co prawda ten przyklad jest nietrafiony - jest zle, ale gdy zmienimy " na ', to bedzie 100% poprawnie

Wiem , że char to int oraz bool to int ale int nie jest stringiem..

nostaleh.png
Opublikowano

@GrAvItY1

bo char to jest tez int, ba, zdziwie cie, bool to tez jest int.

co prawda ten przyklad jest nietrafiony - jest zle, ale gdy zmienimy " na ', to bedzie 100% poprawnie

Ani typ char ani typ bool nie są typem int.

char jest w stanie przechować do 256 różnych wartości,

bool natomiast przechowuje dwie wartości: true i false (których literały reprezentowane są poprzez wartość odpowiednio 1 i 0).

To, co tutaj następuje, to awans (type promoting, nie wiem jak to inaczej przetłumaczyć) zmiennej o mniejszym rozmiarze na zmienną o rozmiarze typu docelowego, której interpretacja nie zmieni się wraz ze zmianą typu. Jako, że znak czy wartość logiczna są reprezentowana przez liczby, które mieszczą się w zakresie typu int, to kompilator dopuszcza takie praktyki ale nie oznacza to, że char == int.

YOU MUST DIE

- Ganon, Koridai

Opublikowano

int znak;

if(znak == "W"){

cout << "==> W <==" << endl;

 

 

znak == "W" ??

 

Moje oczy krwawią.

Jak już to nie stringiem tylko znakiem.

 

A co do tego inta. Jak się uparł ktoś, aby ten znak był w int to if powinnien warunek być taki:

(char) znak == 'W'

Ale musisz pamiętać, aby władować do zmiennej liczbę, a nie samo W.

No chyba, że zmienisz typ zmiennej.

 

Jak chcesz zmienną int porównywać z stringiem ?

Hmmm

string slowo;
int slowoINT [slowo.length()]
for (i = 0; i < slowo.length(); i++) if(slowoINT[i]==(int)slowo)

TuByłaSygnatura.png

Opublikowano

Ani typ char ani typ bool nie są typem int.

char jest w stanie przechować do 256 różnych wartości,

bool natomiast przechowuje dwie wartości: true i false (których literały reprezentowane są poprzez wartość odpowiednio 1 i 0).

To, co tutaj następuje, to awans (type promoting, nie wiem jak to inaczej przetłumaczyć) zmiennej o mniejszym rozmiarze na zmienną o rozmiarze typu docelowego, której interpretacja nie zmieni się wraz ze zmianą typu. Jako, że znak czy wartośc logiczna jest reprezentowana przez liczby, które mieszczą się w zakresie typu int, to kompilator dopuszcza takie praktyki ale nie oznacza to, że char == int.

 

Chodziło o to , że można przekonwertować .

 

 

Moje oczy krwawią.

Jak już to nie stringiem tylko znakiem.

 

A co do tego inta. Jak się uparł ktoś, aby ten znak był w int to if powinnien warunek być taki:

(char) znak == 'W'

Ale musisz pamiętać, aby władować do zmiennej liczbę, a nie samo W.

No chyba, że zmienisz typ zmiennej.

 

Hmmm

string slowo;
int slowoINT [slowo.length()]
for (i = 0; i < slowo.length(); i++) if(slowoINT[i]==(int)slowo)

 

Może i tak się da zrobić ale nie widziałem ,żeby ktoś coś takiego stosował.

nostaleh.png
Opublikowano

Ani typ char ani typ bool nie są typem int.

char jest w stanie przechować do 256 różnych wartości,

bool natomiast przechowuje dwie wartości: true i false (których literały reprezentowane są poprzez wartość odpowiednio 1 i 0).

To, co tutaj następuje, to awans (type promoting, nie wiem jak to inaczej przetłumaczyć) zmiennej o mniejszym rozmiarze na zmienną o rozmiarze typu docelowego, której interpretacja nie zmieni się wraz ze zmianą typu. Jako, że znak czy wartośc logiczna jest reprezentowana przez liczby, które mieszczą się w zakresie typu int, to kompilator dopuszcza takie praktyki ale nie oznacza to, że char == int.

 

 

a int jest w stanie przechowywac do 2147483647 wartosci xD nie chodzilo mi dokladnie o to ze char jest dokladnie tym samym co int - tylko ze czesto sie chara i inta uzywa zamiennie, i nikt w tym nie widzi problemu, i przegladajac jakies kody w C czesto widac dzikie konwersje, typu wlasnie porownania inta z literalami, i nikt z tym nie ma problemu xD

Opublikowano

@GrAvItY1

bo char to jest tez int, ba, zdziwie cie, bool to tez jest int.

co prawda ten przyklad jest nietrafiony -  jest zle, ale gdy zmienimy " na ', to bedzie 100% poprawnie

 

"Bo char to też jest int"

"bool to też jest int"

Co ty robisz w MCT?

 

 

Moje oczy krwawią.

Jak już to nie stringiem tylko znakiem.

 

A co do tego inta. Jak się uparł ktoś, aby ten znak był w int to if powinnien warunek być taki:

(char) znak == 'W'

Ale musisz pamiętać, aby władować do zmiennej liczbę, a nie samo W.

No chyba, że zmienisz typ zmiennej.

 

Hmmm

string slowo;
int slowoINT [slowo.length()]
for (i = 0; i < slowo.length(); i++) if(slowoINT[i]==(int)slowo)

 

Rzutowanie jak już chcesz robić to na odwrót (bo rzutowanie większego typu danych do mniejszego (int -> char) jest potencjalnie głupie):

znak=(int)'W';

zakładając że znak jest typu int.

btw; wytłumacz mi co niby chciałeś tą pętlą osiągnąć. Jak chcesz porównywać stringi to masz taką bardzo przyjemną funkcję jaką jest strcmp. A twój przykład nie dość że jest bezsensowny, to głupi bo próbujesz magicznym sposobem rzutować stringa do inta. Jak chcesz odczytywać kody znaków w stringu po kolei, to robisz tak:

for (int i = 0; i < slowo.length(); i++) {
     //char code: (int)slowo[i];
}

Ale tak na dobrą sprawę nie musimy nic rzutować w kodzie bo program sam będzie wiedział jakiej wartości (liczbowej czy znakowej) użyć w przypadku chara. Bez problemu można traktować 'W' jako liczbę, bez dodatkowych rzutowań.

846331404756772371599.jpeg
Opublikowano
Rzutowanie jak już chcesz robić to na odwrót (bo rzutowanie większego typu danych do mniejszego (int -> char) jest potencjalnie głupie):

znak=(int)'W';

zakładając że znak jest typu int.

btw; wytłumacz mi co niby chciałeś tą pętlą osiągnąć. Jak chcesz porównywać stringi to masz taką bardzo przyjemną funkcję jaką jest strcmp. A twój przykład nie dość że jest bezsensowny, to głupi bo próbujesz magicznym sposobem rzutować stringa do inta. Jak chcesz odczytywać kody znaków w stringu po kolei, to robisz tak:

for (int i = 0; i < slowo.length(); i++) {
     //char code: (int)slowo[i];
}

Ale tak na dobrą sprawę nie musimy nic rzutować w kodzie bo program sam będzie wiedział jakiej wartości (liczbowej czy znakowej) użyć w przypadku chara. Bez problemu można traktować 'W' jako liczbę, bez dodatkowych rzutowań.

Napisałem tylko tak, żeby zrozumiał, że coś takiego istnieje.

Nie zastanawiałem się czy ma to sens czy nie.

TuByłaSygnatura.png

Opublikowano

@Phoenix_PL

#include <iostream>
using namespace std;

int main() {
	int x = 'x';
	int y = 376;
	cout<<x<<" "<<(char)y;
	return 0;
}

 

ZAPISALEM CHARA DO INTA!!! BEZ RZUTOWANIA!!!! I DZIALA!!!! A NIZEJ ZAPISALEM DO INTA WARTOSC, KTORA SIE NIE ZMIESCI W CHARZE, I TEZ OTRZYMALEM 'x' PO ZRZUTOWANIU GO NA CHARA!! MAGIA!!

A TUTAJ DOWOD ZE TO DZIALA: http://ideone.com/rFHYMe

DZIEKUJE DOBRANOC SPIJ SLODKO ANIOLKU

 

 

sorry ale tak juz mam ze nie lubie takich ludzi ty

 

i czasami zdarza mi sie cos pomieszac albo sie zle wyslowic

 

chodzilo mi o to, ze to jeden ch*j czy to jest char czy int czy inny pies, tak czy tak to jest liczba

 

i ze char to taki 8 bitowy int

 

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

 

 

 

 

 

Opublikowano

Ale zrozum, że C++ to nie C.

Zacznij używać C-style castów w kodzie dla jakiejś corpo, wyjebią Cię szybciej niż zatrudnią, bo będą musieli refaktoryzować to co napisałeś.

 

No ale... ty jesteś "najmondzejszy"

 

A i jeszcze: jak coś działa to nie znaczy, że będzie zawsze działać.

 

@down, zostaje mi tylko życzyć powodzenia w szukaniu pracy, z takim podejściem na pewno łatwo znajdziesz.

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano

Ale zrozum, że C++ to nie C.

Zacznij używać C-style castów w kodzie dla jakiejś corpo, wyjebią Cię szybciej niż zatrudnią, bo będą musieli refaktoryzować to co napisałeś.

 

No ale... ty jesteś "najmondzejszy"

 

A i jeszcze: jak coś działa to nie znaczy, że będzie zawsze działać.

jesli zrobilbym C style casty w 5000 plikach i ogolny spaghetti code w moim stylu, i nikt by tego nie zauwazyl odpowiednio szybko to bym mial zapewniona prace do konca zycia juz

Opublikowano

­

 

jesli zrobilbym C style casty w 5000 plikach i ogolny spaghetti code w moim stylu, i nikt by tego nie zauwazyl odpowiednio szybko to bym mial zapewniona prace do konca zycia juz

c-style nie sa sprawdzane przez kompilator w c++ tak. Jak juz sie pisze dla konkretnego jezyka to warto zachować jego konwencje lol

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Opublikowano

­@blowfish

 

@Phoenix_PL

#include <iostream>
using namespace std;

int main() {
	int x = 'x';
	int y = 376;
	cout<<x<<" "<<(char)y;
	return 0;
}

 

ZAPISALEM CHARA DO INTA!!! BEZ RZUTOWANIA!!!! I DZIALA!!!! A NIZEJ ZAPISALEM DO INTA WARTOSC, KTORA SIE NIE ZMIESCI W CHARZE, I TEZ OTRZYMALEM 'x' PO ZRZUTOWANIU GO NA CHARA!! MAGIA!!

A TUTAJ DOWOD ZE TO DZIALA: http://ideone.com/rFHYMe

DZIEKUJE DOBRANOC SPIJ SLODKO ANIOLKU

 

 

sorry ale tak juz mam ze nie lubie takich ludzi ty

 

i czasami zdarza mi sie cos pomieszac albo sie zle wyslowic

 

chodzilo mi o to, ze to jeden ch*j czy to jest char czy int czy inny pies, tak czy tak to jest liczba

 

i ze char to taki 8 bitowy int

 

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

 

 

 

 

 

 

A teraz popatrzmy na to z innej strony.

char i int... Wszystkie możliwe typy danych w C/C++ tak na prawdę różnią się tylko liczbą bitów (no i innym sposobem zapisu jeśli mówimy o float/double - o stringu nie wspomnę bo "klasycznie" string = const char[])

 

A patrząc na twój kod - nie wiem czy zrobiłeś to specjalnie czy nie, ale przybliżę userom fenomen twojego kodu, czyli "jak to się stało że zapisałeś liczbę większą niż pomieści się w 8 bitach, a i tak wyszło dobrze", żeby potem nie było że ktoś zrobi tak samo jak ty myśląc że jest k i nagle się okaże że mu to wykrzacza program:

 

char = 8-bitowa zmienna. Czyli możemy zapisać w niej liczby z zakresu -127/127 (jeśli nie jest unsigned, najstarszy bit jest traktowany jako bit znaku powodując że zakres zmiennej jest rozłożony na - i + po połowie), lub 0/255 jesli mamy doczynienia z unsigned charem.

 

Program wypluwa z twojego kodu 120 i 'x', które podałeś jako 376 w kodzie.

 

A teraz spójrzmy na to:

120 to 11110000 w binarnym

376 to 1011110000 w binarnym.

Concidence?

Castowanie na sztywno przez (char) ucina najstarsze bity, pozostawiając tylko 8 pierwszych. Dzięki temu, dla chara 120 i 376 to jest jedno i to samo.

A żaden szanujący się programista nie powinien dopuszczać do takiej utraty danych, bo potem może wyjść na to że dziwna liczba pojawi się na wejściu, coś nie pójdzie jak powinno i program nam spadnie z rowerka.

 

Nie no, no offence, tylko tutaj tłumaczę mniej ogarniającym o co kaman z tym kodem bo jak jakiś newbie tu wbije i spojrzy, a potem nauczy się tak jak piszesz (nawet jeśli robisz to dla jaj), to bedzie mieć problem. Ale sprytnie to wymyśliłeś.

846331404756772371599.jpeg
Opublikowano

­

 

­@blowfish

 

 

A teraz popatrzmy na to z innej strony.

char i int... Wszystkie możliwe typy danych w C/C++ tak na prawdę różnią się tylko liczbą bitów (no i innym sposobem zapisu jeśli mówimy o float/double - o stringu nie wspomnę bo "klasycznie" string = const char[])

 

A patrząc na twój kod - nie wiem czy zrobiłeś to specjalnie czy nie, ale przybliżę userom fenomen twojego kodu, czyli "jak to się stało że zapisałeś liczbę większą niż pomieści się w 8 bitach, a i tak wyszło dobrze", żeby potem nie było że ktoś zrobi tak samo jak ty myśląc że jest k i nagle się okaże że mu to wykrzacza program:

 

char = 8-bitowa zmienna. Czyli możemy zapisać w niej liczby z zakresu -127/127 (jeśli nie jest unsigned, najstarszy bit jest traktowany jako bit znaku powodując że zakres zmiennej jest rozłożony na - i + po połowie), lub 0/255 jesli mamy doczynienia z unsigned charem.

 

Program wypluwa z twojego kodu 120 i 'x', które podałeś jako 376 w kodzie.

 

A teraz spójrzmy na to:

120 to 11110000 w binarnym

376 to 1011110000 w binarnym.

Concidence?

Castowanie na sztywno przez (char) ucina najstarsze bity, pozostawiając tylko 8 pierwszych. Dzięki temu, dla chara 120 i 376 to jest jedno i to samo.

A żaden szanujący się programista nie powinien dopuszczać do takiej utraty danych, bo potem może wyjść na to że dziwna liczba pojawi się na wejściu, coś nie pójdzie jak powinno i program nam spadnie z rowerka.

 

Nie no, no offence, tylko tutaj tłumaczę mniej ogarniającym o co kaman z tym kodem bo jak jakiś newbie tu wbije i spojrzy, a potem nauczy się tak jak piszesz (nawet jeśli robisz to dla jaj), to bedzie mieć problem. Ale sprytnie to wymyśliłeś.

Ojtam, pewnie ze stresu.

2015-04-03_21-53-02.png

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...