Jaka jest różnica pomiędzy %d
i %i
kiedy jest używany jako specyfikator formatu printf
?
202
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 %d
skanuje liczbę całkowitą jako liczbę dziesiętną ze znakiem, ale %i
domyś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 033
byłoby 27 z, %i
ale 33 z %d
.
printf
iscanf
.Są identyczne,
printf
ale różne dlascanf
. Dlaprintf
zarówno%d
i%i
wyznacza liczbę całkowitą ze znakiem dziesiętnym. Forscanf
,%d
a%i
także oznacza liczbę całkowitą ze znakiem, ale interpretuje dane wejściowe jako%i
liczbę szesnastkową, jeśli jest poprzedzone przez,0x
i ósemkowe, jeśli jest poprzedzone,0
i inaczej interpretuje dane wejściowe jako dziesiętne.źródło
Nie ma różnicy między specyfikatorami
%i
i dla%d
formatuprintf
. Widzimy to, przechodząc do projektu standardowej sekcji C99.7.19.6.1
Funkcja fprintf, która obejmuje równieżprintf
specyfikatory formatu i mówi w paragrafie 8 :i zawiera następujący punkt:
Z drugiej strony, ponieważ
scanf
istnieje różnica,%d
załóż bazę 10, podczas gdy%i
auto wykrywa bazę. Możemy to zobaczyć przechodząc do sekcji7.19.6.2
Funkcja fscanf, która obejmujescanf
w odniesieniu do specyfikatora formatu, w paragrafie 12 mówi:i obejmuje:
źródło
Nic nie ma
printf
- oba są synonimami.źródło
scanf()
formacie ciągu, jak mówi zaakceptowana odpowiedź.