В чем разница между %d
и %i
когда используется как спецификатор формата printf
?
202
Они одинаковы при использовании для вывода, например, с printf
.
Однако они отличаются, когда используются в качестве входного спецификатора, например, с scanf
, где %d
сканирует целое число как десятичное число со знаком, но по %i
умолчанию используется десятичное число, но также допускается шестнадцатеричное (если ему предшествует 0x
) и восьмеричное (если ему предшествует 0
).
Так 033
было бы 27 с %i
но 33 с %d
.
printf
иscanf
.Они идентичны для,
printf
но разные дляscanf
. Ибоprintf
,%d
и%i
назначьте десятичное целое число со знаком. Forscanf
,%d
а%i
также означает целое число со%i
знаком, но интерпретирует ввод как шестнадцатеричное число, если ему предшествует,0x
и восьмеричное, если ему предшествует,0
и иначе интерпретирует ввод как десятичное.источник
Там нет никакой разницы между
%i
и%d
спецификаторы формата дляprintf
. Мы можем убедиться в этом, перейдя к черновому стандартному разделу C99.7.19.6.1
Функция fprintf, которая также охватываетprintf
спецификаторы формата и говорит в параграфе 8 :и включает в себя следующую маркировку:
С другой стороны,
scanf
если есть разница,%d
предположим , что база 10, а%i
автоопределение базы. Мы можем увидеть это, перейдя в раздел7.19.6.2
Функция fscanf, котораяscanf
описывает спецификатор формата, в параграфе 12 говорится:и включает в себя следующее:
источник
В них нет ничего
printf
- это синонимы.источник
scanf()
строке формата, как говорится в принятом ответе.