Frage zu %d und %i in C?
Was ist der Unterschied zw %d und %i . Im Internet steht alle beide werden für int also ganze Zahlen verwendet aber was ist dann der Unterschied zw. den beiden. Wieso einmal %d und ein anderes mal %i.
3 Antworten
%d ist auf dezimale Integer beschränkt. Bei der Ausgabe mit printf macht das keinen Unterschied, bei der Eingabe mit scanf aber schon. Hier kann %i auch oktale oder hexadezimale Zahlen einlesen (in manchen Implementationen auch binäre Zahlen), während %d ausschließlich Dezimalzahlen annimmt.
Offiziell steht %d für "decimal number (base 10)". Das ist aber in der Ausgabe faktisch dasselbe wie "integer".
Der Unterschied wird jedoch beim Einlesen von Zahlen per scanf interessant: %d geht immer davon aus, dass die Basis 10 ist. %i versucht, die Basis zu bestimmen, so dass per %i auch hex oder Oktaldarstellungen eingelesen werden können.
Das habe ich ja bereits vor Deinem Kommentar noch ergänzt.
Als ich begonnen habe meinen Kommentar zu schreiben war diese Ergänzung noch nicht da.
Das mag sein - aber sie war da, bevor Dein Kommentar online ging. ;-)
Ausgabe macht keinen unterschied.
Bei der eingabe wird %d als dezimalzahl mit vorzeichen angesehen und %i als dezimal oder hexadezimal
Sie bedeuten nicht dasselbe. Während %d die Basis 10 fest annimmt, ist %i nicht auf die Basis 10 beschränkt. Bei der Ausgabe macht das keinen Unterschied, bei der Eingabe aber schon. Hier kann man mit %i auch oktale (führende 0), hexadezimale (führendes 0x) und in manchen Implementationen binäre (führendes 0b) Zahlen spezifizieren, während %d nur Dezimalzahlen annimmt.