Einelsen von ganz genau n Zeichen
-
Hallo,
Ich möchte in meiner Consolenanwendung dem Benutzer ermögliche ein einem Datenfeld ganz genau n Zeichen einzugeben.
Gibt er mehr ein, werden diese nicht weiter auf dem Bildschirm ausgeben.Beim normalen scanf weden diese Zeichen dann aber trozdem ausgeben.
Das will ich aber nichtWie könnte man das umsetzen?
Gruß,
DFI10X
-
Eine Schleife von getch()-Aufrufen. getch() ist zwar nicht ANSI-C aber dennoch nahezu bei jedem Compiler mit an Board (<conio.h>).
Das sollte mal als ungetester Ansatz genügen:
void readLine (char* dest, int len) { // Einlesen char c = 0; for(int i = 0; i < len && c != '\n'; ++i) { dest[i] = c = getch(); } // Bis zum Enter ignorieren, kann man auch weglassen (ich hätts weggelassen) while(getch() != '\n') ; }
MfG SideWinder
-
Danke
So Sachen wie Backpace oder Delte werden aber jetzt als Zeichen gezählt oder?
-
hm ja doch, eigentlich schon
del kannst du in dem getch() fall garnicht benutzen, weil du die pfeiltasten nicht benutzen kannst
-
Dei kannst du abfangen und selber auswerten, Backspace ist zB ascii-code 8, in dem fall machst du i wieder eins kleiner (zwar böse, aber wayne) und gibst "\b \b" aus um die ausgabe wieder eins zurückzusetzen.
Das man mit getch() keine Pfeiltasten einlesen kann ist schlichtweg falsch.
MfG SideWinder
-
es wäre besser, wenn du nicht nur die gewünschte zahl von zeichen sondern die ganze eingabezeile einlesen und dann nur die gewünschte zahl von zeichen ausgeben würdest. ansonsten bliebe noch der rest der eingabe im puffer und würde bei nachfolgenden eingaben probleme machen.
um zb nur 10 zeichen eines strings mit printf() auszugeben, schreibst du
printf("%.10s\n",str);
wenn du nicht nur maximal 10 der zeichen ausgeben sondern den rest der eingabe komplett verwerfen willst, dann kannst du
str[10]='\0';
schreiben. dann ist der string schon nach 10 zeichen zu ende.
SideWinder schrieb:
Das man mit getch() keine Pfeiltasten einlesen kann ist schlichtweg falsch.
ob man das kann ist systemabhängig. soviel ich weiß, kann man bei manchen betriebssystemen auch steuerzeichen einlesen, wenn man stdin auf _IONBF stellt. bei sehr alten betriebssystemen, bei denen sich die konsolen-eingabe noch nicht editieren läßt, wie etwa dem atari-tos, werden steuerzeichen von haus aus eingelesen.
-
ich habs grad ausprobiert mit getch(), gcc und windows2k.
es geht. allerdings kommt vorher eine 224 vom getch(), bevor die eigentliche taste kommt.pfeiltasten sind nicht im ascii zeichensatz. deswegen die "doppelbelegung".
a: 97
b: 98
c: 99
auf: 224 72
ab: 224 80
links: 224 75
rechts: 224 77
esc: 27
das waren meine ergebnisse.
-
Konfusius schrieb:
es wäre besser, wenn du nicht nur die gewünschte zahl von zeichen sondern die ganze eingabezeile einlesen und dann nur die gewünschte zahl von zeichen ausgeben würdest. ansonsten bliebe noch der rest der eingabe im puffer und würde bei nachfolgenden eingaben probleme machen.
Da ich eine Eingabemaske mit "Feldern" habe, würde es mir das aussehen total verhauen wenn der Benutzer mehr Zeicvhen eingeben könnte als das Feld breit ist.
@c.rackwitz
Danke für die Mühe. Die Abfrage von Steuerzeichen war mir schon bekannt