Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   In stdin schreiben und gleich wieder auslessen Ansi C (https://www.delphipraxis.net/113667-stdin-schreiben-und-gleich-wieder-auslessen-ansi-c.html)

ferby 12. Mai 2008 19:58


In stdin schreiben und gleich wieder auslessen Ansi C
 
Hallo,

ich habe mal eine Frage, warum geht das nicht so:

Delphi-Quellcode:
    fprintf(stdin, "a\n");
    fgets(test, 2, stdin);


Ich möchte in die stdin schreiben, und das dann sofort wieder auslessen.
Irgendwie wird die fprintf anweisung ignoriert.

(Bitte jetzt nicht nach den Sinn des Progs fragen^^)

mkinzler 12. Mai 2008 20:16

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Was meinst du mit wird ignoriert?
Zitat:

(Bitte jetzt nicht nach den Sinn des Progs fragen^^)
Gut dann frage ich nicht was es soll.

ferby 12. Mai 2008 20:18

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Hello,

na es ist kein unterschied, ob ich die Zeile schreibe oder nicht.

Eigentlich sollte doch in test dannach "a\n" drin stehen,
doch stattdessen wartet fgets auf eine Eingabe vom Benutzer und macht erst nach dem Drücken der Entertaste weiter.

jbg 12. Mai 2008 20:22

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Zitat:

Zitat von ferby
Ich möchte in die stdin schreiben

Du bist also jemand der zum Eingang wieder hinaus will und gegen den ganzen Strom von Menschen anläuft. Da ist es doch kein Wunder, wenn du nicht raus kommst.
Warum das Ding wohl Standard Input heißt. Da kannst du nicht drauf schreiben, da du am falschen Ende des Rohrs sitzt.

mkinzler 12. Mai 2008 20:27

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Das heisst aber nicht, dass das printf nicht ausgeführt wird, sondern eher das STDIN nicht als Ausgabedevice fungieren kann

Nuclear-Ping 12. Mai 2008 20:28

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Und ist stdin nicht Benutzereingabe? :gruebel:

grenzgaenger 12. Mai 2008 20:30

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Zitat:

Zitat von ferby
Delphi-Quellcode:
fprintf(stdin, "a\n");
Irgendwie wird die fprintf anweisung ignoriert.

tja, ist halt ein eingabekanal, kein ausgabekanal ...

genauso gut könntest du fragen wie du vom drucker tastatureingaben einlesen kannst oder auf der tastatur 'n formular ausgeben... :drunken:

ferby 12. Mai 2008 20:35

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Hello,

hab grad gelesen das stdin nur zum lesen geöffnet ist... :-(


Habe das Posting auch hier gepostet
C Forum

da wird die funktion ungetc vorgeschlagen, muss mich mal damit ein wenig spielen

grenzgaenger 12. Mai 2008 20:52

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
ungetc schiebt das letzte, durch getch, eingelesene zeichen wieder zurück in den buffer, damit es beim nächsten getch eingelesen werden kann. das hat nix mit deinem ursprünglichen problem zu tun. auch ungetc, erstellt dir kein formular auf der tastatur ;-)

ferby 12. Mai 2008 20:56

Re: In stdin schreiben und gleich wieder auslessen Ansi C
 
Wieso dsa letzte zeichen, ich kann ja als Parameter ein Zeichen angeben

ungetc('a', stdin);

Also das klappt bei mir auch sowei

ungetc('a', stdin);
fgets(test, 2, stdin);
printf("Der Buchstabe ist: --> %s <--\n",test);

gibt mir ein a aus, wenn ich Enter drücke.

Mein Problemm ist jetzt, das wenn ich

ungetc('a', stdin);
ungetc('\n', stdin);
fgets(test, 2, stdin);
printf("Der Buchstabe ist: --> %s <--\n",test);

schreibe, dann muss der Benutzer nicht Enter drücken, aber es wird das a nicht mehr ausgegeben :-(
glaube ungetc löscht den Buffer oder so...


EDIT: Jetzt kapier ichs, der ließt dann zuerst \n ein und dann erst a, der dreht alles um.....
na da muss ich mich noch ein wenig spielen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz