Odpowiedzi:
Są takie same, gdy są używane jako dane wyjściowe, np printf. Z.
Jednak różnią się one, gdy są używane jako specyfikator wejściowy, np. Z scanf, gdzie %dskanuje liczbę całkowitą jako liczbę dziesiętną ze znakiem, ale %idomyślnie jest to liczba dziesiętna, ale pozwala także na wartości szesnastkowe (jeśli poprzedza je 0x) i ósemkowe (jeśli poprzedza je 0).
Tak 033byłoby 27 z, %iale 33 z %d.
printfi scanf.
Są identyczne, printfale różne dla scanf. Dla printfzarówno %di %iwyznacza liczbę całkowitą ze znakiem dziesiętnym. For scanf, %da %itakże oznacza liczbę całkowitą ze znakiem, ale interpretuje dane wejściowe jako %iliczbę szesnastkową, jeśli jest poprzedzone przez, 0xi ósemkowe, jeśli jest poprzedzone, 0i inaczej interpretuje dane wejściowe jako dziesiętne.
Nie ma różnicy między specyfikatorami %ii dla %dformatu printf. Widzimy to, przechodząc do projektu standardowej sekcji C99. 7.19.6.1 Funkcja fprintf, która obejmuje również printfspecyfikatory formatu i mówi w paragrafie 8 :
Specyfikatory konwersji i ich znaczenie to:
i zawiera następujący punkt:
d,i The int argument is converted to signed decimal in the style [−]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is 1. The result of converting a zero value with a precision of zero is no characters.
Z drugiej strony, ponieważ scanfistnieje różnica, %dzałóż bazę 10, podczas gdy %iauto wykrywa bazę. Możemy to zobaczyć przechodząc do sekcji 7.19.6.2 Funkcja fscanf, która obejmuje scanfw odniesieniu do specyfikatora formatu, w paragrafie 12 mówi:
Specyfikatory konwersji i ich znaczenie to:
i obejmuje:
d Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the strtol function with the value 10 for the base argument. The corresponding argument shall be a pointer to signed integer. i Matches an optionally signed integer, whose format is the same as expected for the subject sequence of the strtol function with the value 0 for the base argument. The corresponding argument shall be a pointer to signed integer.