Frage zu %d und %i in C?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

%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.


HansImGlueck178  17.12.2018, 15:06

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.

0

Ausgabe macht keinen unterschied.

Bei der eingabe wird %d als dezimalzahl mit vorzeichen angesehen und %i als dezimal oder hexadezimal