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
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
%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.
![](https://images.gutefrage.net/media/user/ohwehohach/1484229011333_nmmslarge__192_3_203_203_916b80d33227bc2c78789585f46b3253.jpg?v=1484229011000)
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.
![](https://images.gutefrage.net/media/user/ohwehohach/1484229011333_nmmslarge__192_3_203_203_916b80d33227bc2c78789585f46b3253.jpg?v=1484229011000)
Das habe ich ja bereits vor Deinem Kommentar noch ergänzt.
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Als ich begonnen habe meinen Kommentar zu schreiben war diese Ergänzung noch nicht da.
![](https://images.gutefrage.net/media/user/ohwehohach/1484229011333_nmmslarge__192_3_203_203_916b80d33227bc2c78789585f46b3253.jpg?v=1484229011000)
Das mag sein - aber sie war da, bevor Dein Kommentar online ging. ;-)
![](https://images.gutefrage.net/media/default/user/10_nmmslarge.png?v=1551279448000)
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.