Tôi biết điều này nghe không hiệu quả, nhưng tôi đang tìm cách ghi nhớ tất cả các mã định dạng cho các cuộc gọi printf
. %s
, %p
, %f
là tất cả rõ ràng, nhưng tôi không thể hiểu nơi %d
xuất phát từ. Có phải %i
đã được thực hiện bởi cái gì khác không?tại sao% d đứng cho Số nguyên?
Trả lời
viết tắt của "decimal" (cơ sở 10), không phải là "số nguyên". Bạn có thể sử dụng %x
để in ở hexadecimal (cơ sở 16) và %o
để in ở octal (cơ sở 8). Một số nguyên có thể nằm trong bất kỳ căn cứ nào trong số này.
Trong printf()
, bạn có thể sử dụng %i
như một từ đồng nghĩa với %d
, nếu bạn thích để chỉ "số nguyên" thay vì "thập phân", nhưng %d
thường được ưa thích vì nó là cụ thể hơn.
Khi nhập, sử dụng scanf()
, bạn cũng có thể sử dụng cả số %i
và %d
. %i
có nghĩa là phân tích cú pháp dưới dạng số nguyên trong bất kỳ cơ sở nào (bát phân, thập lục phân hoặc thập phân, như được chỉ ra bởi tiền tố 0
hoặc 0x
), trong khi %d
có nghĩa là phân tích cú pháp dưới dạng số nguyên thập phân.
Dưới đây là một ví dụ về tất cả trong số họ trong hành động:
#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;
}
Vì vậy, bạn chỉ nên sử dụng %i
nếu bạn muốn cơ sở đầu vào phụ thuộc vào tiền tố; nếu cơ sở đầu vào phải được sửa, bạn nên sử dụng %d
, %x
hoặc %o
. Đặc biệt, thực tế là một hàng đầu 0
đặt bạn ở chế độ bát phân có thể bắt kịp bạn.
Cảm ơn bạn đã giải thích lý do tại sao% i hoạt động theo cách đó. – clementine
http://en.wikipedia.org/wiki/Printf_format_string dường như để nói rằng đó là cho số thập phân như tôi đã đoán
d,i
int dạng số thập phân đã ký kết. '% d' và '% i' đồng nghĩa với đầu ra , nhưng khác khi được sử dụng với scanf() cho đầu vào (sử dụng% i sẽ diễn giải một số dưới dạng thập lục phân nếu nó đứng trước 0x và bát phân nếu nó đứng trước 0.)
- 1. Trong Vim tại sao hành vi của "w" từ bộ chọn phù hợp khi đứng trước "d" vs "v"
- 2. Tại sao sử dụng @property trong D?
- 3. số nguyên để chuyển đổi chuỗi trong D
- 4. SQL: Tại sao CREATE TRIGGER cần đứng trước GO
- 5. Tại sao C++ cho phép một số nguyên được gán cho một chuỗi?
- 6. Tại sao read() trong FileInputStream trả về một số nguyên?
- 7. Tại sao PDO_MySQL không trả về số nguyên?
- 8. Tại sao sàn không trả về một số nguyên?
- 9. Tại sao bạn muốn tràn số nguyên xảy ra?
- 10. Tại sao quá trình biên soạn D mất quá lâu?
- 11. không% d trong String.format() làm việc cho số nguyên unsigned cũng?
- 12. Tại sao Đếm không phải là số nguyên không dấu?
- 13. Những gì hiện "apachectl" đứng cho? Tại sao nó không chỉ là "apache"?
- 14. Python regex cho số nguyên?
- 15. lý do tại sao ereg ("^ \ d {11} $", 18311111111) là sai?
- 16. Tại sao Python cho tôi "số nguyên là bắt buộc" khi nó không nên?
- 17. Tại sao ngôn ngữ lập trình cho phép gán từ số nguyên thành viết tắt?
- 18. uint32_t hiện những gì đứng cho?
- 19. gì WINAPI đứng cho
- 20. Tại sao lỗi tràn số nguyên gây ra lỗi với C++ iostream?
- 21. Tại sao không có loại nguyên thủy cho Chuỗi?
- 22. Tại sao chia hai số nguyên không nhận được một phao?
- 23. Tại sao nhấn mũi tên trái trong irb cho tôi "^ [[D"?
- 24. Tại sao giá trị tuyệt đối của số nguyên âm tối đa-2147483648 vẫn là -2147483648?
- 25. Tại sao chọn SCOPE_IDENTITY() trả lại một số thập phân thay vì một số nguyên?
- 26. Lập trình CGI tại D
- 27. lớp Wrapper - tại sao literals số nguyên không cho Long nhưng làm việc cho bất cứ điều gì nhỏ
- 28. In số 0 đứng đầu trong C?
- 29. Tại sao parseInt() trả về kết quả không mong đợi khi tôi chuyển một chuỗi có số 0 đứng đầu?
- 30. Trong java -D D là gì?
Đoán tốt nhất của tôi là số thập phân –
Có tuy nhiên, đây là một câu hỏi thú vị. – Daniel
Mặc dù nó không phải là một câu hỏi lập trình thực sự, và tôi có xu hướng đóng những câu hỏi đó :) –