Visual c++ 2015 printf und fprintf



  • Hallo,
    Wahrscheinlich ein einfaches Problem .. (verwende visual c++ 2015)
    Mit "printf" werden Double (als auch String) in einer Spalte "rechtsbündig" (wie es sein sollte) auf dem Bildschirm ausgegeben.
    Mit "fprintf" (z.B. %15.2f) allerdings werden die double (oder auch string) nur zentriert/mittig in die txt-Datei geschrieben. Linksbündiges Schreiben (z.B. %-15.2f) als auch das Auffüllen mit 0 (z.B. %015.2f) funktioniert problemlos.
    Wie kann ich mit "fprintf" rechtsbündige Spalten ausgeben .. ?

    Hier ein einfaches Beispiel:

    int main()
    {
    int row;
    double bb;
    bb = 12345678.90;
    FILE *afile;
    afile = fopen("c:\\users\\jose\\desktop\\TEST100_out.txt", "w+");
    for (row = 0; row < 10; row++)
    {
    if (row > 5)
    {
    bb = 5678.90;
    }
    printf("%15.2f\n", bb); // rechtsbündig - ok !
    fprintf(afile, "%15.2f\n", bb); // nur mittig - sollte rechtsbündig !
    }
    fclose(afile);
    return 0;

    Danke für die Hilfe ..



  • Tritt das Problem auch auf, wenn Du fprintf(stdout, ...) benutzt?
    Mangels VC hab ich's gerade hier versucht und es sieht ganz ordentlich aus.

    Vielleicht eher ein Problem mit dem anzeigenden Programm?



  • Hallo,
    Danke für die Rückmeldung.
    Mit fprintf(stdout,%15.2f\n) erzeugt der command prompt rechtsbündig 000000005678.90.
    Die Datei ist folglich leer.
    ???



  • jose schrieb:

    Mit fprintf(stdout,%15.2f\n) erzeugt der command prompt rechtsbündig 000000005678.90.

    Okay.
    Also rechtsbündig. Aber wo kommt die 0 her? Das kann doch nicht sein!? Ich nehme an, Du hast dann fprintf(stdout, "%015.2f\n", ...); benutzt?

    Aber die Ausgabe ist wenigstens rechtsbündig 🙂

    Ich vermute immer noch ehehr ein Problem mit dem Programm, das Du zur Anzeige verwendest. Notepad, type, excel?

    Du kannst die Ausgabe nach stdout mal spasseshalber in eine Textdatei pipen und schauen, ob sie im Anschluss auch "mittig" angezeigt wird.



  • Du hast recht: Ich hatte noch die "0" Einstellung vom letzten testlauf übernommen.
    Jetzt ist der command output auch rechstbündig.
    ich habe eine Windows Etextdatei document.txt verwendet.
    Aber was heisst (für einen nicht IT'ler) Textdatei pipen ..?



  • jose schrieb:

    Aber was heisst (für einen nicht IT'ler) Textdatei pipen ..?

    Eigentlich ist es noch nichtmal pipen. Nennen wir es umleiten. Egal.

    Angenommen, du hast ein Programm, das stdout schreibt.

    #include <stdio.h>
    int main(void) {
      fprintf(stdout, "%15.2f\n", 3.14159);
    }
    

    Das ganze hast Du output_test genannt. Dann kannst Du die Ausgabe nach stdout beim Aufruf umleiten: An der Kommandozeile:

    output_test > test.txt
    

    Jetzt ist test.txt eine 1:1 Kopie der Ausgabe des Programms. Also rechtsbündig! Richtig?

    Siehe: https://technet.microsoft.com/de-de/library/bb490982.aspx



  • Danke. Umleitung in txt-Datei funktioniert .. allerdings leider wiederum mittig.
    Ich denke das Problem ist die Formatierung der txt-Datei ..



  • jose schrieb:

    Danke. Umleitung in txt-Datei funktioniert .. allerdings leider wiederum mittig.
    Ich denke das Problem ist die Formatierung der txt-Datei ..

    Eine txt Datei kennt keine Formatierung.

    Vermutlich ist der Text rechtsbündig wenn du das Fenster des editors, mit dem du die txt Datei öffnest in der Breite verkleinerst 😉

    Das in der konsolen ausgabe der text "rechtsbündig" ist liegt daran, dass das konsolenfenster eine feste breite hat.



  • Klappt leider auch nicht mit dem txt Fenster .. Bin nun doch etwas ratlos.
    Ich denke aber, dass der txt-Editor dass Problem ist ..



  • Aber das ist ist doch ein kosmetisches Problem...
    Oder ist das jetzt ein Showstopper für Dich?



  • In diesem Fall ist es leider kein nur "kosmetisches" Problem, da ich es für ein Großprojekt mit mehreren Tausend Daten und einer entsprechenden Datenbank einsetzen will.
    Daher ist die Gruppierung der Spalten für die Übersichtlichkeit absolut notwendig, da sich ansonsten wie momentan, die Spalten horizontal ineinander verschieben.
    Trotzdem besten Dank für Deine Unterstützung .. !



  • Er meint, dass das lediglich ein Problem der Anzeige ist, in der Datei aber die richtigen Leerzeichen drin stehen, so dass eine rechtsbündige Anordnung geben ist. Daher ein "rein kosmetisches Problem". Wenn du alles richtig gemacht hast, sollte ein externes Programm, was von einer rechtbündigen Anordnung abgängt, keine Probleme haben. Im Zweifel mal mit dem Hexeditor in die Textdatei reinschauen und Leerzeichen zählen.



  • I got it !
    Das Problem ist tatsächlich die Formatierung (Font) der txt Datei.
    Nur mit dem txt Font "Lucida Console" funktioniert die rechtsbündige Ausgabe in der Datei.
    Offensichtlich war der Font bislang anders eingestellt.
    Vielen Dank an Alle für die Unterstützung!



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply