double Variable mit %d ausgeben



  • marcm244 schrieb:

    Wär aber auch sinnvoller 😃

    Nö.
    Da printf eine Funktion mit variabler Argumentenliste ist, bekommt es auch bei float double-Werte zu sehen.

    Das %d steht für dezimal.

    Das %i ist bei printf nicht unbedingt nötig.



  • Da printf eine Funktion mit variabler Argumentenliste ist, bekommt es auch bei float double-Werte zu sehen.

    Kapier ich ned ganz 😕

    Sry, bin noch nicht so bewandert in C 😞


  • Mod

    marcm244 schrieb:

    Da printf eine Funktion mit variabler Argumentenliste ist, bekommt es auch bei float double-Werte zu sehen.

    Kapier ich ned ganz 😕

    Regeln für Funktionen mit variablen Argumentenlisten. Demnach werden alle Argumente erst einmal der "default argument promotion" ausgesetzt, bevor sie an die Funktion übergeben werden:

    C Standard schrieb:

    If the expression that denotes the called function has a type that does not include a
    prototype, the integer promotions are performed on each argument, and arguments that
    have type float are promoted to double. These are called the default argument
    promotions.



  • Und darum ist der Formatspecifier %lf für printf auch erst mit C11 in den Standard aufgenommen worden.
    Aus Resignation.



  • @ SeppJ
    Danke! Hab mich gleich mal drüber informiert!

    @DirkB
    Gut zu wissen, ich hab nämlich bis jetzt des öfteren mal %lf geschrieben und das darf ich nicht, wenns erst in C11 im Standard ist. Wir müssen strikt C89 programmieren, für alles andere gibt es in der Prüfung 0 Punkte 🙄



  • Ob dein Tutor das auch weiß?

    %lf (für double bei printf ) wird eigentlich von allen Compileren/C-Standard-Librarys akzeptiert.

    Und wie gesagt, das gilt für printf . scanf ist eine ganz andere Funktion.



  • Du meinst, ob der Professor (nicht Tutor 😉 )das weiß.

    Ja, akzeptiert wirds vielleicht schon, aber wenn es im C89 Standard offiziell eigentlich nicht drin ist, sondern erst im C11, dann DARF ich es nicht nutzen.

    Sollte ich es in der Prüfung doch nutzen (auch wenn es funktionieren würde), ist das ein Fehler und gibt Punktabzug.

    Ich darf beispielsweise auch keine Variable a einlesen und dann int array[a] schreiben und ein Array "variabler" Länge in Abhängigkeit der Variablen a zu bekommen.
    Gehen tuts schon, ist aber im C89 Standard noch nicht offiziell festgelegt --> Fehler in der Prüfung

    Aber mal kurz ne andere Frage:
    D.h. ich geb nach C89 Standard eine double Variable mit %f aus, richtig?


  • Mod

    marcm244 schrieb:

    D.h. ich geb nach C89 Standard eine double Variable mit %f aus, richtig?

    Unter anderem, ja. Es gibt noch ein paar weitere: %e, %E, %g, %G. Und noch jeweils Modifikationen dieser. Mehr findest du in Referenzen zu der Funktion.



  • marcm244 schrieb:

    ... ob der Professor (nicht Tutor 😉 ....

    Mir doch egal. 😃
    Dein Lehrmeister halt. Tja, Professoren haben leider immer recht, auch wenn man das Gegenteil schwarz auf weiß belegen kann. Wenn er der Meinung ist, das %lf für double richtig ist (denn das war schon immer so), dann versuch das Gegenteil zu beweisen.

    Irgendwo hast du auch den Schrott mit fflush(stdin); her.
    Das ist auch nicht von C89 gedeckt. Es ist aber nicht verboten, sondern gibt undefiniertes Verhalten

    marcm244 schrieb:

    Aber mal kurz ne andere Frage:
    D.h. ich geb nach C89 Standard eine double Variable mit %f aus, richtig?

    Ja, probier es aus.
    Setzte die Compilerflags für C89 -std=c89 und schalte den Warnlevel auf Maximum -Wall .
    Beseitige auch die letzte Warnung vom Compiler.

    Und schau mal in der Linkliste für Neulinge. Da stehen Links zu den Drafts der einzelnen C-Standars. Vergewissere dich selber und lies es durch (oder nur die Stellen die dich interessieren).



  • Des fflush(stdin) stand als Hinweis bei der Aufgabe dabei. Hab dann nur kurz gegoogelt, was das ist und habs davor gesetzt. Ohne das vor dem scanf() hatte ich nämlich in 2 anderen Aufgaben (wo der Hinweis dann auch stand) diverse Probleme, wenn ich irgendeine Variable öfter einlesen hab müssen.

    Ich hab grad nochmal ein paar seiner "Musterlösungen" durchgeschaut und da steht immer %f, also werd ich das nehmen. Das .txt File mit der Definition von C89 führ ich mir lieber irgendwann anders zu gemühte, weil das ist schon seeeeeeehr böse für nen Anfänger 😃

    Auf jedenfall mal Danke an euch alle!


Anmelden zum Antworten