Char in den TastaturBuffer ablegen
-
Es gibt ja die Funktion getch() die liest im Buffer ein Zeichen aus falls vorhanden, ansonsten wartet sie bis eine taste gedrückt wurde. Mit kphit() kann man jetzt testen ob Buffer leer ist oder nicht.
Jetzt meine frage, gibt es in C einen Befehl mit dem man ein CHAR bzw. Zeichen in den TastaturBuffer schieben kann?
THX!
-
Hi !
int ungetc( int c, FILE *stream );
MfG, p.
-
proggingmania schrieb:
int ungetc( int c, FILE *stream );
das gilt aber nur für ein zeichen
-
Wie man eine ganze Zeichenkette reinschreibt, hab ich nicht gefunden.
-
Aber der Titel heisst ja auch: Char in den TastaturBuffer ablegen.
und nicht: Char* in den TastaturBuffer ablegen.Lallallaaaa.
-
Was spricht dagegen, nen char * via ungetc zu pushen? Einfach den String von hinten nach vorne Char für Char mit ungetc wieder hochschreiben in den Stream.
-
Jo, das geht, aber dafür muss man vorher etwas eingegeben haben, sonst lässt sich nur ein Zeichen reinschreiben.
-
proggingmania schrieb:
... Char* in den TastaturBuffer ablegen.
das geht nicht, pointer sind meistens zu breit dafür
feigling schrieb:
Einfach den String von hinten nach vorne Char für Char mit ungetc wieder hochschreiben in den Stream.
geht auch nicht. man bekommt von hinten nur ein zeichen rein, das nächste würde das vorherige wahrscheinlich überschreiben...
-
pale dog schrieb:
das geht nicht, pointer sind meistens zu breit dafür
Wenn man vorher etwas z.B. mit fgest einliest, dann geht das.
-
proggingmania schrieb:
pale dog schrieb:
das geht nicht, pointer sind meistens zu breit dafür
Wenn man vorher etwas z.B. mit fgest einliest, dann geht das.
nie im leben!
-
pale dog schrieb:
nie im leben!
#include <stdio.h> #include <string.h> int main () { int c; char buf[30]=""; puts("Geben Sie eine Zeichenkette ein( Maximal 26 Zeichen ): "); fgets( buf, 26, stdin ); for ( c = 'a'; c < 'a' + strlen(buf); c++ ) { printf("Pushback: %3d %c\n", ungetc( c, stdin ), c ); } puts("Read Keyboard-Buf:"); while( ( c = getchar() ) != '\n' ) printf("%c", c ); return 0; }
-
proggingmania schrieb:
pale dog schrieb:
nie im leben!
...
zufall? was sagt der C-standard dazu?
-
pale dog schrieb:
zufall? was sagt der C-standard dazu?
Keine Ahnung.
-
ah, hier
ISO/IEC 9899:1999 (E)
ISO/IEC 7.19.7.11 The ungetc function schrieb:
One character of pushback is guaranteed. If the ungetc function is called too many
times on the same stream without an intervening read or file positioning operation on that
stream, the operation may fail.
-
pale dog schrieb:
... If the ungetc function is called too many
times ...Da könnte man sich jetzt die Frage stellen, wie oft too many times ist.
Es scheint jedefalls so zu sein, das man die mit fgets entnommene Anzahl wieder zurückpacken kann( auch in veränderter Form).
Welchen Sinn das hat, das sei mal dahingestellt
-
Es ist aber eben nur für ein Zeichen garantiert. Viel Spass auf undefiniertem Terrain
Was ich damit sagen will: Es mag gehen, aber nicht überall. Von daher besser Finger weg.
-
mal ne blöde frage, aber wenn man mit setvbuf den stdin buffer durch nen eigenen ersetzt, dann könnt man den doch beschreiben oder geht das nicht?
-
proggingmania schrieb:
Da könnte man sich jetzt die Frage stellen, wie oft too many times ist.
Nach Terry Pratchett mindestens 4, wir wissen wie Orks zählen: one, two, three, many, lots, many and one ....