Komisches Verhalten von printf

Gast #1576734
Hallo Leute,
ich bin beim programmieren zufällig auf folgendes Problem gestoßen:
Beim Ausführen dieses Codes
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4

5
int var;
6

7
int main( ){
8

9
  printf("%f\n", 2345.0f);
10

11
  var = 6;
12
  printf("%f\n", var);
13
  printf("%i\n", var);
14

15

16
  system("PAUSE");
17
  return 0;
18

19
}

kommt das unerwartete Ergebniss: 2345 \n 2345 \n 6    raus. Eigentlich 
hätte ich 2345 \n 0 \n 6   oder ähnliches erwartet.
Wie kommt soetwas?

Gruß, Yaro
#1576750
Bei
1
  printf("%f\n", var);
wobei var ein int ist, ist das Ergebnis undefiniert, es kann alles 
passieren.  Auch dass die CPU ihre Elektronen in Marsch setzt, um den 
Stecker zu ziehen.

Aber auch 2345 ist schon ein schönes undefiniertes Ergebnis.  Was willst 
Du mehr?
Gast #1576759
Hättest Du mal die Warnings gelesen, die Dir der Compiler auspuckt, da 
steht die Lösung:
1
$ gcc -Wall printf-test.c -o printf-test
2
printf-test.c: In function ‘main’:
3
printf-test.c:10: warning: format ‘%f’ expects type ‘double’, but argument 2 has type ‘int’

Das Verhalten von printf ist dadurch dadort undefiniert, da könnte 
genausogut Grützewütze bei rauskommen. Wenn man aber - die Warnung 
behebend - den Code auf
1
printf("%f\n", (double)var);
ändert, dann kommt auch die erwartete Ausgabe
1
2345.000000
2
6.000000
3
6

HTH und HF und Du hast hoffentlich was daraus gelernt [1] :-)

[1] Lerninhalt: -Wall regelt, der Compiler meckert fast immer Zurecht 
und gibt manchmal sogar die richtige Fehlerstelle mit an ;-)
Gast #1576816
Doch... GCC... Warnungen eingeschaltet...

Habe jetzt aber nochmal geguckt, der zeigt mir tatsächlich keine 
Warnungen an. Benutze wx-Dev-Cpp zum programmieren auf dem PC, 
normalerweise programmiere ich Mikrocontroller (mit Code Blocks).
Gast #1576831
Hab es jetzt!
Musste bei den zusätzlichen kommandozeilen-Optionen -Wall hinzufügen, um 
Warnungen anzustellen.

Vielen Dank für eure Hilfe!
Gruß, Yaro

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.