Skocz do zawartości
Prog

[c++] Kody Ascii

Rekomendowane odpowiedzi

Mam pytanie. Piszę akurat program, do którego potrzebuję zczytywać klawisze jakie wciśnie użytkownik i napisać na przykład: klawisz funkcyjny F1. Wszystko jest ok. Mój kod rozróżnia klawisz ESC, małe i duże litery, cyfry. Kłopot zaczyna się przy klawiszu ENTER lub F1. Nie wiem gdzie mogę znaleźć kod ASCII tych klawiszy. U mnie w skrypcie działają kody ósemkowe. Np

 

'\032'
to spacja

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Może wkleisz co masz i opiszesze bo tak na sucho to cieżko cokolwiek odpowiedzieć.

Ok.

 

#include <iostream.h>#include <conio.h>//-----------------------------void main() {		cout << "Podaj znak z klawiatury: ";		char znak = getch();		if (znak>='\141' && znak <='\172'){				cout << "mala litera";		}		if (znak>='\101' && znak <='\132'){				cout << "duza litera";		}		if (znak>='\060' && znak <='\071'){				cout << "duza litera";		}		if (znak=='\033'){				cout << "klawisz ESC";		}		if (znak==???){				cout << "klawisz ENTER";		}		if (znak=='???'){				cout << "strzalka w lewo";		}		if (znak=='???'){				cout << "strzalka w prawo";		}		if (znak=='???'){				cout << "klawisz funkcyjny F1";		}		if (znak=='???'){				cout << "inny klawisz";		}		getch();}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zrób pomocniczy programik:

#include <stdio.h>int main (){	char a=znak;	scanf("%c", &a); // tu wcisniesz klawisz, ktorego nie znasz, albo a=getch(); 	print("Wcisnoles %d\n", a);}

i powinno pokazać co wciskasz. Chociaz niewiem jak pod windowsem :] Inny sposób, który mi jeszcze przyszedł na myśl to wykorzystanie jakiejś biblioteki, np. SDL, ale z tym to już jest troche więcej kodu.

pozdr.

Edytowane przez DiJo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zrób pomocniczy programik:

#include <stdio.h>int main (){	char a=znak;	scanf("%c", &a); // tu wcisniesz klawisz, ktorego nie znasz, albo a=getch(); 	print("Wcisnoles %d\n", a);}

i powinno pokazać co wciskasz. Chociaz niewiem jak pod windowsem :] Inny sposób, który mi jeszcze przyszedł na myśl to wykorzystanie jakiejś biblioteki, np. SDL, ale z tym to już jest troche więcej kodu.

pozdr.

Kiepsko... Z klawiszami głównymi jest ok. Gorzej ze strzałkami, czy F1. Tego nie czyta.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak.. za pierwszym razem sprawdzasz czy jest 0, jesli jest to znaczy, ze jest to klawisz specjalny, wiec czytasz drugi raz i wtedy dostaniesz prawidlowy kod. Sprawdzilem przed chwila.. dziala.

Działa. Dzieje się tak, bo funkcja getch(); pobiera z bufora klawiatury jeden bajt. Więc jeżeli liczba jest zapisana w formie np. 013 to wtedy należy pobrać najpierw z bufora klawiatury 0 [tak jak móiwsz FiDO], a potem sprawdzić jakie cyfry są po zerze. Wszystko jest wtedy ok.

 

Tutaj podam parę linijek kodu, aby wszystko było jasne.

 

if (znak==0){				znak=getch()+1000;				if (znak==1059){						cout << "klawisz F1";				}		}

Zapytacie się dlaczego 1000 po getch(). Ano dlatego, by nie pomylić się ze standardowym ASCII o kodzie 59 na przykład.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

co powinienem zrobić żeby w linuksie mieć funkcje getch() ? Nie ma plików iostream ani conio :( Da sie to ściągnąć w jakimś pakiecie? Albo może są jakieś odpowiedniki (oprócz stdio.h)

google nie gryzie:

 

http://www.google.pl/search?client=firefox...Szukaj+w+Google

 

Na przykład: http://cboard.cprogramming.com/archive/ind...hp/t-27714.html

czy: http://www.thescripts.com/forum/thread503640.html

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#include <conio.h>#include <iostream.h>int main(){  clrscr();  while (1)  {	   char c = getch();	   cout << (int)c << endl << endl;	   //Esc kończy działanie programu	   if((int)c == 27)	 break;  }  return 0;}

Uruchom sobie ten kod, podczas naciśnięcia przycisku bedziesz mieć jego kod. Przed niektórymi przyciskami oczywiście są zera w tym i przed strzałkami.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#include <conio.h>#include <iostream.h>int main(){  clrscr();  while (1)  {	   char c = getch();	   cout << (int)c << endl << endl;	   //Esc kończy działanie programu	   if((int)c == 27)	 break;  }  return 0;}

Uruchom sobie ten kod, podczas naciśnięcia przycisku bedziesz mieć jego kod. Przed niektórymi przyciskami oczywiście są zera w tym i przed strzałkami.

Właśnie tu jest kłopot, bo getch() pobiera jeden bit z bufora klawiatury a nie dwa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...