/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
[C] Problemer med getch()
Fra : Thomas L. Christense~


Dato : 12-11-04 17:20

Hej

Jeg har et C program med en menu. Det er noget kode jeg har skrevet af
fra en bog engang, så det burde virke - men der er altså et eller
andet galt. Selve koden, der laver menuen, ser sådan her ud:

int main()
{
char ch_1, ch_2;

//init_screen();
while(1)
{
ch_1 = getch();
if (ch_1 == 0)
{
ch_2 = getch();
switch(ch_2)
{
case 'n':
//enter_order();
break;
case 'c':
//add();
break;
case 'x':
exit(0);
default:
break;

}
}
   }
   return 0;
}

Det ser jo meget fornuftigt ud (?) - men det virker ikke! Jeg har
leget lidt med det, og fundet frem til, at getch() returnerer
forskellige værdier, alt efter om man trykker 'x' eller 'Alt-x'.

#include <stdio.h>

int main()
{
   char ch_1=0, ch_2=0;

   ch_1 = getch();
   if (ch_1 == 0)
   {
      ch_2 = getch();
      printf("ch_2 = %d", ch_2);
   }
   else
   {
      printf("ch_1 = %d", ch_1);
   }

   return 0;
}

Burde Alt-x ikke resultere i at ch_2 kom til at indeholde 120, ligesom
ch_1 gør, hvis man blot taster x?

Jeg _mener_ at jeg har haft kompileret og kørt programmet engang, og
at der ikke var nogen problemer med menuen. Men måske husker jeg
forkert? Programmerne er kompileret på Borland Turbo C++ 3.0...

På forhånd tak for hjælpen.


Thomas

 
 
Bertel Brander (12-11-2004)
Kommentar
Fra : Bertel Brander


Dato : 12-11-04 21:04

Thomas L. Christensen wrote:
>
> Jeg _mener_ at jeg har haft kompileret og kørt programmet engang, og
> at der ikke var nogen problemer med menuen. Men måske husker jeg
> forkert? Programmerne er kompileret på Borland Turbo C++ 3.0...
>

På Turbo C 2.01 giver Alt X et 0 og et '-' (45), mens
BorlandC 5.5 ikke kender forkel på x og att-x.
Jeg har ikke TurboC 3.0.

Jeg brugte dette lille program til at teste med:;
#include <conio.h>
#include <stdio.h>
#include <ctype.h>

int main()
{
int key;
do
{
key = getch();
printf("%3d %c\n", key, isprint(key) ? key : '.');
}
while(key != 'q');
return 0;
}


--
"I learned more from a three minute record
than I ever learned in school"
- Bruce Springsteen

Thomas L. Christense~ (14-11-2004)
Kommentar
Fra : Thomas L. Christense~


Dato : 14-11-04 12:24

On Fri, 12 Nov 2004 21:04:29 +0100, Bertel Brander
<bertel@post4.tele.dk> wrote:

[snip]

>På Turbo C 2.01 giver Alt X et 0 og et '-' (45), mens
>BorlandC 5.5 ikke kender forkel på x og att-x.

Det er da ganske aldeles upraktisk...

Anyway, tak for svaret.


Thomas

Karl Olsen (12-11-2004)
Kommentar
Fra : Karl Olsen


Dato : 12-11-04 23:24

Thomas L. Christensen <tlc@fabel.dk> wrote:

> Jeg har et C program med en menu. Det er noget kode jeg har skrevet af
> fra en bog engang, så det burde virke - men der er altså et eller
> andet galt. Selve koden, der laver menuen, ser sådan her ud:
>
> [...]
>
> Det ser jo meget fornuftigt ud (?) - men det virker ikke! Jeg har
> leget lidt med det, og fundet frem til, at getch() returnerer
> forskellige værdier, alt efter om man trykker 'x' eller 'Alt-x'.
>
> #include <stdio.h>
>
> int main()
> {
> char ch_1=0, ch_2=0;
>
> ch_1 = getch();
> if (ch_1 == 0)
> {
> ch_2 = getch();
> printf("ch_2 = %d", ch_2);
> }
> else
> {
> printf("ch_1 = %d", ch_1);
> }
>
> return 0;
> }
>
> Burde Alt-x ikke resultere i at ch_2 kom til at indeholde 120, ligesom
> ch_1 gør, hvis man blot taster x?

Nej. Når getch() returnerer 0, betyder det at tasten ikke har en
ASCII-kode, og at det næste getch()-kald returnerer tastens scankode. Se
f.eks. http://www.jimprice.com/jim-asc.htm nede under "IBM PC Keyboard Scan
Codes". Ved Alt-X returnerer getch() først 0 og dernæst 45.

Karl Olsen
http://karl.rudbaek-olsen.dk




Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste