From: Jonathan Foster Newsgroups: comp.os.msdos.djgpp Subject: Re: problem with readkey() Date: Thu, 16 Oct 1997 21:15:34 +0100 Organization: University of Kent at Canterbury, England Message-ID: <344675E6.177A@ukc.ac.uk> References: <01bcda6c$d9e94d80$0200a8c0 AT ingo> NNTP-Posting-Host: dhcp2dd5.ukc.ac.uk Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 38 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Ingo Ruhnke wrote: > > I got here some simple code which dosen't run as I expect it to work: > if (readkey() == 'a') { > > this didn't get me the info about that was pressed, it said every time > "a wasn't pressed", but if i modify it to this: > > char c; > if ((c = readkey()) == 'a') { > the programm works fine. Can anybody tell me why this is so. And if > i use getchar() instead of readkey() it also works like expected, > so were is the problem which this code. I think allegro returns the scancode or similar data in the high byte returned by readkey(). Assigning this to a "char" will lose the high byte, leaving the letter. A more explicit way of coding this is: if ( (char)readkey() == 'a') { OR if ( (readkey() & 0xFF) == 'a') { Note the single "&" (bitwise and) Hope this helps. P.S. There is a mailing list for allegro - visit this site for how to join: http://www.talula.demon.co.uk/allegro/ -- Jon Foster. (1st Year Maths/Computer Science Student)