printf Ausgabe trotz Umlenkoperator



  • Hallo, ich habe eine relativ kurze Frage bezüglich des Umlenkoperators.
    Ich habe in meinem Programm eine Tastaturabfrage mit scanf eingerichtet. Bevor allerdings die Abfrage kommt, wird noch ein Text ausgegeben in der erläutert wird, was man machen soll. Also so was wie:

    "#Tippen Sie 0 ein um alle Werte auszugeben oder Tippen Sie eine andere beliebige Taste um nur Wert a,b und c auszugeben."

    Wenn ich nun das Programm ausführe erscheint in der Konsole auch diese Abfrage bzw. Anweisung. Benutze ich allerdings den Umlenkoperator:

    ./a.out > datenausgabe.dat

    so wird mir die Anweisung auch in die Datei datenausgabe geschrieben und es wird nur darauf gewartet 0 oder etwas anderes einzutippen. Das kann ich soweit auch nachvollziehen, da ich ja gesagt habe, das die Ausgabe in die Datei datenausgabe.dat geschrieben werden soll. Besteht aber die Möglichkeit die Anweisung trotzdem im Terminal erscheinen zu lassen und nur alles was danach kommt in die Datei zu schreiben?

    PS: Zur Zeit habe ich die Abfrage ja so gestaltet, dass 0 oder jede beliebige andere Ziffer oder Zahl eingetragen werden kann. Ich würde das aber gerne noch so gestalten, dass 0 oder 1 gewählt werden muss. Wird eine andere Zahl oder ein Buchstabe verwendet, so soll das Programm abgebrochen werden. So wie:

    if ((i!=1) && (i!=0))
      {
        return(0);
      }
    

    Also wenn i nicht 1 und nicht 0 ist, dann wird abgebrochen.
    Das möchte aber nicht so wie ich möchte. :p
    Hab das schon mit diversen Variationen probiert. Aber komme nicht auf die Lösung.



  • Ist i vom Typ int? Wenn es ein char ist, dann muss es '1' oder '0' heißen. Beim Rest verstehe ich nur Bahnhof. Mehr Code notwendig.

    Kann mir jemand erklären was ein "Umlenkoperator" ist? wtf.



  • Zwei Möglichkeiten. Entweder fprintf() nutzen oder die Ausgabe über ein Programm wie tee splitten.

    http://linux.die.net/man/1/tee

    Für fprintf() als FILE-Pointer stdout und stderr nutzen oder gleich ein geeignetes File angeben.



  • Hallo Martin, mit fprintf habe ich es hingekommen. Danke für den Tipp.
    Hab mir auch mal die Anweisung zu tee durchgelesen, das hab ich aber nicht so hingekommen und wenn ich das richtig verstanden habe ist das auch ein wenig umständlicher als fprintf.

    @HighLigerBiMBam
    Der Umlenkoperator macht nichts anderes, als die Ausgabe in eine Datei umzuleiten. Die Standartausgabe ist normalerweise der Monitor. Daher werden alle Ausgaben in der Console angezeigt. Da ich aber möchte, dass diese in einer Datei erscheinen schreibe ich einfach in der Console:

    ./a.out > ausgabe.dat
    

    Nun wird alles in diese Datei geschrieben.
    Zumindest habe ich mir das so erklären lassen.



  • Lenkt das > blah.dat stdout nicht um?



  • Das Problem hatte ich ja zunächst.
    Hab das ja jetzt mit dem Vorschlag von Martin gelöst.
    Sieht jetzt so aus:

    fprintf(stderr,"# Welche Werte sollen ausgegeben werden?..."\n);
    

    Damit wird der Text immer ausgegeben, auch wenn ich > ausgabe.dat benutze.


Anmelden zum Antworten