Wpis z mikrobloga

Mam problem z zadaniem, pewnie banalne ale nie moge znalesc dokladnej odpowiedzi Mam rozpoznac rodzaj wpisanego znaku i uzywam do tego kodow ascii, dziala dla malych duzych liter, jednak mam problem ze strzalkami, wyczytalem ze najpierw daja kod 224 a potem dopiero swoj kod ale nie działa halp;p

#include
#include
using namespace std;

int main()
{
char znak;
znak=getch();
if ((znak > 47) && (znak < 58)) cout << "Jest to cyfra." << endl;
if ((znak > 96) && (znak < 123)) cout << "Jest to mala litera." << endl;
if ((znak > 64) && (znak < 91)) cout << "Jest to duza litera." << endl;
if ((znak == 13)) cout<< "Wcisnales Enter";
if ((znak == 27)) cout<< "Wcisnales ESC";
if (znak=224)
{
if ((znak == 77)) cout<< "prawo";
}

return 0;
}

#programowanie
  • 10
  • Odpowiedz
@Gorion103: wyglada to tak, jak cos #!$%@? to pisz, ale dalej to samo

char znak;
znak=getch();
if ((znak > 47) && (znak < 58)) cout << "Jest to cyfra." << endl;
if ((znak > 96) && (znak < 123)) cout << "Jest to mala litera." << endl;
if ((znak > 64) && (znak < 91)) cout << "Jest to duza litera." << endl;
if ((znak == 13)) cout<< "Wcisnales Enter";
if
  • Odpowiedz
@Grigorian:

ogólne rozwiąznanie: wypisz odebrany znak jako liczbę żeby dowiedzieć się co jest wysyłane

cout << (unsigned int)znak
if (znak == 224)


tak nie można, 224 nie mieści się w char. zmień char znak na unsigned char znak


niestandardowy nagłówek, lepiej tego nie używać
  • Odpowiedz
@Grigorian: wywala w sensie że interpretuje jakby nie było ujemnych. wartości ujemne to te z najwyższym bitem zapalonym, char ma 8 bitów, więc wszystko powyżej 2^7-1 == 127 było interpretowane jako ujemne. Dla typów unsigned najwyższy bit jest częścią dodatniej.
Fizycznie to są te same bity w zmiennej, tylko różnie interpretowane.
w tym ifie znak był automatycznie konwertowany na int, z unsigned 224 robiło się -32. Potem porównywał to -32 z
  • Odpowiedz