c: isprint ist der Meinung, das "Cursor auf" druck

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Jogibär
Beiträge: 149
Registriert: 11.09.2002 22:43:37

c: isprint ist der Meinung, das "Cursor auf" druck

Beitrag von Jogibär » 10.08.2006 19:35:37

Hallo,

ich habe gerade folgendes Problem festgestellt:

isprint () ist der Meinung, das die Taste " Cursor hoch" ein druckbares Zeichen ist.

Ich erhalte folgende Scancodes:

Cursor auf: 259
Cursor ab 258
Cursor links 260
Cursor rechts 261

Nur bei "Cursor auf" liefert isprint TRUE, ansonsten FALSE
Woran kann das liegen ?

Code: Alles auswählen

#include <stdio.h>
#include <string.h>
#include <curses.h>
#include <ctype.h>

int main()
{
int  tasten_code=0, taste = 0;      

  initscr();                        // Initialisiert das Terminal
  start_color();                    // Farbe unterstuetzen
  cbreak();                         // Zeichen sofort weiterreichen
  noecho();                         // Kein Echo bei getch()
  nonl();                           // Keine neue Zeile bei Return
  intrflush(stdscr, FALSE);
  keypad(stdscr, TRUE);             // Ziffernblock aktivieren.
  clear();                          // Bildschirm loeschen

  for (;;)
  {
    tasten_code = getch();
    taste = isprint(tasten_code);
    if ( taste)    
	{                
      	printw ("\ndruckbar = ");
	printw("dez = %d\n", tasten_code);
	}
    else
    	{
	printw ("\nnicht druckbar");
	printw("dez = %d\n", tasten_code);
	}
   }
}
Jogibär

Edit by Snoopy:
Code-Tags für die Leserlichkeit eingefügt.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 11.08.2006 11:09:29

hi,

Wie der Name "char.h" schon sagt, testet isprint() chars,
maximal noch unsigned, aber nichts breiteres als 8 Bit.
Das Ergebnis ist also undefiniert.

Du müsstest mit Mitteln von ncurses erstmal rausfinden,
ob es ein Steuerzeichen ist. Was getch() hier zurückgibt,
ist auch nichts aus der WideChar- oder UTF-Abteilung;
es ist aber auch nicht der Scancode.

[quote=""man isprint""] These functions checkwhether c, which must have the value of an
unsigned char or EOF, falls into a certain character class according to
the current locale.[/quote]
Beware of programmers who carry screwdrivers.

Antworten