C switch

Programovacie jazyky, rady, poradňa...
skvido
Star
Star
Príspevky: 508
Registrovaný: 17 nov 2008, 7:43
Kontaktovať používateľa:

C switch

Príspevok od používateľa skvido »

zdravim ludia mam taky problem s nacitanim tlacidiel F1 - F12 , pre F1 - F10 funguje vo switchi 0x00 lenze to funguje pre vsetkch 10 rovnako a ked ich chcem niako rozlisit tak to je uz problem skusil som taketo nieco , pricom 59 funguje pre F1 a 60 pre F2 , problem je v tom ze ked stlacim F1 tak to ide , ked stlacim F2 tak to prvou podmienkou neprejde a pri druhej kde by to malo ist to proste odignoruje a nespravi to nic , ked podmienky vymenim ze 60 je prva a 59 druha tak zase funguje iba F2 a F1 nie a neviem co stym robit , vie mi niekto poradit ?

Kód: Vybrať všetko

int main()
{
	unsigned char ch = 0;
	do  {
		if (kbhit())                             
		{
			ch = getch();  
			switch (ch)                         
			{

			case 0x00: 
				
				if (getch() == 59)
				{
					printf("123\n");
					break;
				}
				if (getch() == 60)
				{
					printf("66556");
					break;
				}

			default: break;
			}
		}
		
	} while (ch != 27);                        

		printf("\n\nKoniec...\n\n");
		return 0;

	
}
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa Fabo »

vyhod tie kucerave zatvorky za prvym if, resp. uzavri ich bodkociarkou
skvido
Star
Star
Príspevky: 508
Registrovaný: 17 nov 2008, 7:43
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa skvido »

preco ? :D
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa Fabo »

si to editoval? mohol si rovno hodit do code tagu.

a vobec, preco tam mas v kazdom ize getch? raz ho nacitas, sedi orbis, nesedi, nacitas dalsie tuknutie?
skvido
Star
Star
Príspevky: 508
Registrovaný: 17 nov 2008, 7:43
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa skvido »

ta ked tam dam namiesto getch() len tu premennu ch do krorej sa to uklada tak uz to nejde vobec , neexistuju niake ASCII hodnoty pre F1,F2 ... ine ako 0x00 ? nieco cim by sa konkretizovalo ktore presne tlacidlo to je

// nechapem to ked dam to ch vypisat tak je to 59 , 60 ... ale v debug mode mi to stale ukazuje ze ch je nula aj ked sa vypise 59 akoze .... , respektive to vypise 059 069 a to ako podmenku take cislo zadat nemozem
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa Fabo »

dobre no. pre zaciatok sem postni !!do code tagu!! cely program.
skvido
Star
Star
Príspevky: 508
Registrovaný: 17 nov 2008, 7:43
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa skvido »

a teraz ? :D
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: C switch

Príspevok od používateľa *****HERO***** »

kamo, teraz je to krasne, to je orgazmus pre oci takyto odsadeny kod tu na fore ... och a este tie elegantne 2 riadky za 1 riadok pred navratovou hodnotou a tajomneho vypisu "Koniec..." ... je to pekne odvzdusnene.. nemam slov .. postupujes :smt049

no, ale teraz k tomu, co tym chcel majster Android povedat. uvedom si, ze kazde volanie funkcie getch() vyvola cakanie na vstup. čili ty na zaciatku programu tu funkciu zavolas, vysledok ulozis do premennej ch, no potom, ked v tom switchi tu hodnotu chces testovat, tak ty miesto toho volas tu funkciu znova. čili2 zamen to volanie funkcii v tych podmienkach za premennu ch a posunieme sa o kusok dalej ;)
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa Fabo »

Diky za preklad do normalnej reci :D

Inak mne neslo ani o to ch (aj ked aj o to), ale hlavne...

ides do cyklu, precitas "druhy bajt" z klavesnice, ak je 59, OK... ak nie je... citaz znova klavesnicu? Ten "druhy bajt" tam uz ale nenajdes
skvido
Star
Star
Príspevky: 508
Registrovaný: 17 nov 2008, 7:43
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa skvido »

cely problem bol v tom ze ked som tam dal iba "ch" tak to nerobilo absolutne nic , zaujimave ze ked som to dal mimo switchu tak to uz islo
a ktym "tajomnym" vypisom , toto je len cast kodu , mne slo iba o ten switch
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: C switch

Príspevok od používateľa Fabo »

Tak potom plati to co som napisal ja.

F keys vracaju "dva bajty" do buffera. Teda ono su to dva chary, takze bez uvodzoviek. F keys vracaju dva bajty do buffera.

Teraz si pozri flow tvojho programu, a pokracuj so mnou.

nacitas si prvy bajt do ch. Na nom urobis case (naco? kontrolujes viac hodnot?).
Teraz ak bol stlaceny F key, tak prvy bajt je, na tvojom systeme, 0x00. Case ta switchne do subrutiny.

No a tu je to o com hovorim.
Pusti sa prvy if. Prvy if nacita druhy bajt z buffera, cize ak si stlacil F1 tak 59, cize 0x3B ked dobre pocitam.
Teraz porovna nacitanu hodnotu, ak je 59 tak parada, urobi to co treba.
Ale.... a teraz to pride...

Stlacis F2. Prvy if urobi getch, nacita z buffera 60. zisti ze 60 == 59 je False, preskoci svoj execute code.
No a teraz za stane co?
Teraz sa stane to, ze dalsi if urobi za getch. No a porozmyslaj co najde v bufferi. Poradim ti, 60 to nebude. Preco, na to uz musis prist sam.
Napísať odpoveď