logo

Różnica między specyfikatorem formatu %d i %i w języku C

Specyfikator formatu to znak specjalny lub sekwencja znaków używana do zdefiniowania typu danych, które mają być wydrukowane na ekranie lub typu danych, które mają zostać zeskanowane ze standardowego wejścia. Specyfikator formatu zaczyna się od znaku „%”, po którym następuje sekwencja znaków dla różnych typów danych.

Krótko mówiąc, mówi nam, jaki typ danych przechowywać, a który wydrukować. Specyfikatory formatu są używane głównie z funkcjami scanf() i printf().



Na przykład, jeśli chcemy przeczytać i wydrukować liczbę całkowitą za pomocą skanf() i printf(), używane jest %i lub %d, ale istnieje subtelna różnica w obu przypadkach %I I %D specyfikator formatu .

%d określa liczbę całkowitą dziesiętną ze znakiem, podczas gdy %i określa liczbę całkowitą o różnych podstawach.

„%d” i „%i” zachowują się podobnie w przypadku printf()

Nie ma różnicy pomiędzy specyfikatorami formatu %i i %d używanymi z printf.



Rozważ następujący przykład.

C




ddl kontra dml



// C program to demonstrate> // the behavior of %i and %d> // with printf statement> #include> int> main()> {> >int> num = 9;> >// print value using %d> >printf>(>'Value of num using %%d is = %d '>, num);> >// print value using %i> >printf>(>'Value of num using %%i is = %i '>, num);> >return> 0;> }>

>

>

Wyjście

Value of num using %d is = 9 Value of num using %i is = 9>

Zachowanie %d i %i jest inne w przypadku funkcji scanf()

%d zakłada bazę 10, podczas gdy %i automatycznie wykrywa bazę.

Dlatego oba specyfikatory zachowują się inaczej, gdy są używane z funkcją wejściową. Zatem wartość 012 będzie wynosić 10 w przypadku %i, ale 12 w przypadku %d.

złożony klucz podstawowy
    %d przyjmuje wartość całkowitą jako liczbę całkowitą dziesiętną ze znakiem, tj. przyjmuje wartości ujemne wraz z wartościami dodatnimi, ale wartości powinny być w postaci dziesiętnej, w przeciwnym razie wyświetli wartość śmieciową.
    ( Notatka : Jeśli dane wejściowe są w formacie ósemkowym, np. 012, wówczas %d zignoruje 0 i przyjmie wartość wprowadzoną jako 12).
    %i przyjmuje wartość całkowitą jako wartość całkowitą typu dziesiętnego, szesnastkowego lub ósemkowego.
    Aby wprowadzić wartość w formacie szesnastkowym, należy podać wartość poprzedzając 0x, a aby wprowadzić wartość w formacie ósemkowym, należy podać wartość poprzedzającą 0.

Rozważ następujący przykład.

C


świat wumpusa



// C program to demonstrate the difference> // between %i and %d specifier> #include> int> main()> {> >int> a, b, c;> >printf>(>'Enter value of a in decimal format:'>);> >scanf>(>'%d'>, &a);> >printf>(>'Enter value of b in octal format: '>);> >scanf>(>'%i'>, &b);> >printf>(>'Enter value of c in hexadecimal format: '>);> >scanf>(>'%i'>, &c);> >printf>(>'a = %i, b = %i, c = %i'>, a, b, c);> >return> 0;> }>

>

>

Wyjście

Enter value of a in decimal format: 12 Enter value of b in octal format: 012 Enter value of c in hexadecimal format: 0x12 a = 12, b = 10, c = 18>

Wyjaśnienie

  • Wartość dziesiętna liczby a jako 12 wynosi 12
  • Wartość dziesiętna b jako 12 (ósemkowa) wynosi 10
  • Wartość dziesiętna c jako 12 (szesnastkowo) wynosi 18