logo

Різниця між специфікатором формату %d і %i в мові C

Специфікатор формату — це спеціальний символ або послідовність символів, які використовуються для визначення типу даних, які друкуються на екрані, або типу даних, які скануються зі стандартного введення. Специфікатор формату починається із символу «%», за яким слідує послідовність символів для різних типів даних.

Коротше кажучи, він повідомляє нам, який тип даних зберігати, а які друкувати. Специфікатори формату в основному використовуються з функціями scanf() і printf().



Наприклад, якщо ми хочемо прочитати та надрукувати ціле число за допомогою scanf() і функції printf(), використовується або %i, або %d, але в обох є тонка різниця %i і %d специфікатор формату .

%d визначає десяткове ціле число зі знаком, тоді як %i визначає ціле число з різними основами.

«%d» і «%i» поводяться подібно з printf()

Немає різниці між специфікаторами формату %i та %d при використанні з printf.



Розглянемо наступний приклад.

C




з'єднання та типи з'єднань



// 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;> }>

>

arraylist відсортований java
>

Вихід

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

Поведінка %d і %i відрізняється від scanf()

%d передбачає базу 10, тоді як %i автоматично визначає основу.

wumpus світ

Тому обидва специфікатори поводяться по-різному, коли вони використовуються з функцією введення. Отже, значення 012 буде 10 з %i, але 12 з %d.

    %d приймає ціле число як десяткове ціле число зі знаком, тобто приймає від’ємні значення разом із додатними, але значення мають бути десятковими, інакше буде надруковано сміттєве значення.
    ( Примітка : Якщо вхідні дані є у вісімковому форматі, як-от 012, тоді %d ігноруватиме 0 і прийматиме вхідні дані як 12).
    %i приймає ціле значення як ціле число з десятковим, шістнадцятковим або вісімковим типом.
    Щоб ввести значення в шістнадцятковому форматі, значення має передувати 0x, а щоб ввести значення у вісімковому форматі, значення має передувати 0.

Розглянемо наступний приклад.

C




// 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;> }>

кероване машинне навчання

>

>

Вихід

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>

Пояснення

  • Десяткове значення a як 12 дорівнює 12
  • Десяткове значення b як 12 (вісімкове) дорівнює 10
  • Десяткове значення c як 12 (шістнадцяткове) дорівнює 18