Wiem, że to nie brzmi produktywnie, ale szukam sposobu, aby zapamiętać wszystkie kody formatowania dla połączeń printf
. %s
, %p
, %f
są oczywiste, ale nie mogę zrozumieć, skąd pochodzi %d
. Czy %i
jest już zrobione przez coś innego?dlaczego% d oznacza wartość całkowitą?
Odpowiedz
Jest to "decimal" (podstawa 10), a nie "liczba całkowita". Możesz użyć %x
, aby wydrukować w hexadecimal (podstawa 16) i %o
, aby wydrukować w octal (podstawa 8). Liczba całkowita może być w dowolnej z tych zasad.
W printf()
, można użyć %i
jako synonim dla %d
, jeśli wolisz, aby wskazać „całkowitą” zamiast „po przecinku”, ale %d
ogół jest korzystne, ponieważ jest bardziej szczegółowy.
Na wejściu, używając scanf()
, można również użyć zarówno %i
, jak i %d
. %i
oznacza przetwarzanie go jako liczbę całkowitą w dowolnej bazie (ósemkowej, szesnastkowej lub dziesiętnej, zgodnie z prefiksem 0
lub 0x
), podczas gdy %d
oznacza przetwarzanie go jako dziesiętną liczbę całkowitą.
Oto przykład ich wszystkich w akcji:
#include <stdio.h>
int main() {
int out = 10;
int in[4];
printf("%d %i %x %o\n", out, out, out, out);
sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]);
printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]);
sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]);
printf("%d %d %d\n", in[0], in[1], in[2]);
return 0;
}
Tak, należy użyć tylko %i
jeśli chcesz podstawy wejściowego zależy od przedrostka; jeśli podstawa wejściowa powinna być stała, powinieneś użyć %d
, %x
lub %o
. W szczególności fakt, że wiodący 0
umieści Cię w trybie ósemkowym, może Cię złapać.
Dziękuję za wyjaśnienie, dlaczego% i działa tak, jak to robi. – clementine
http://en.wikipedia.org/wiki/Printf_format_string zdaje się mówić, że jest to dla przecinku jak odgadł
d,i
int jako liczba dziesiętna ze znakiem. '% d' i '% i' są synonimami dla wyjścia , ale są różne w przypadku użycia z scanf() do wprowadzania danych (użycie% i interpretuje liczbę jako szesnastkową, jeśli poprzedza ją 0x, i ósemkowa, jeśli jest poprzedzona 0.)
- 1. W języku java -D co oznacza skrót D?
- 2. Synchronizacja na wartość całkowitą
- 3. Math.pow biorąc wartość całkowitą
- 4. Co oznacza .d w języku JSON?
- 5. JavaScript:% s lub% d oznacza ciąg?
- 6. Co oznacza mc: Ignorable = "d" w WPF?
- 7. Co oznacza d w ścieżce svg?
- 8. Formatowanie ciągów z "{0: d}" nie konwertuje na liczbę całkowitą
- 9. Jak przekonwertować wartość całkowitą na wartość dziesiętną?
- 10. Dlaczego dzielenie liczby zmiennoprzecinkowej przez liczbę całkowitą zwraca wartość 0,0?
- 11. Jak poprawnie ustawić wartość całkowitą w NSDictionary?
- 12. Jak uzyskać wartość całkowitą wyliczenia?
- 13. Jak dodać wartość całkowitą do NSMutableArray?
- 14. Pętla przez wartość całkowitą z Nunjucks Templating
- 15. Ciągle zwiększaj wartość całkowitą po naciśnięciu przycisku.
- 16. Konwertuj wartość całkowitą koloru na RGB
- 17. Uzyskaj całkowitą wartość wyliczenia, która jest generyczna
- 18. Jak uzyskać wartość całkowitą z NSDictionary?
- 19. Jak uzyskać wartość całkowitą dzień tygodnia
- 20. Jak przekonwertować wartość całkowitą na ciąg?
- 21. Jak pobrać wartość całkowitą z NSRange?
- 22. Co oznacza drugi dwukropek w "Liście: D:" w Perlu 6?
- 23. Dlaczego warto korzystać z @property w D?
- 24. Dlaczego na wyjściu brakuje litery "D"?
- 25. Dlaczego warto używać statycznego w D?
- 26. dlaczego ereg ("^ \ d {11} $", 18311111111) jest fałszywy?
- 27. C zmiennoprzecinkowej zmienia wartość% d za każdym razem wykonywany
- 28. Dlaczego read() w FileInputStream zwraca liczbę całkowitą?
- 29. Dlaczego odejmowanie wskaźnika w C daje liczbę całkowitą?
- 30. Co oznacza składnia "zmienna // = wartość" w języku Python?
Moje najlepsze przypuszczenie jest dziesiętne –
Tak, jednak jest to rodzaj ironicznego +1, interesujące pytanie. – Daniel
Choć nie jest to prawdziwe pytanie programistyczne, a ja staram się je zamknąć :) –