Tôi biết điều này nghe có vẻ 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 printf
cuộc gọi. %s
, %p
, %f
Tất cả đều rõ ràng, nhưng tôi không thể hiểu được %d
đến từ đâu. Đã %i
được thực hiện bởi một cái gì khác?
Tôi biết điều này nghe có vẻ 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 printf
cuộc gọi. %s
, %p
, %f
Tất cả đều rõ ràng, nhưng tôi không thể hiểu được %d
đến từ đâu. Đã %i
được thực hiện bởi một cái gì khác?
Câu trả lời:
Nó là viết tắt của " decimal " (cơ số 10), không phải "số nguyên". Bạn có thể sử dụng %x
để in ở hệ thập lục phân (cơ số 16) và %o
in ở hệ bát phân (cơ số 8). Một số nguyên có thể nằm trong bất kỳ cơ sở nào trong số này.
Trong printf()
, bạn có thể sử dụng %i
như một từ đồng nghĩa %d
, nếu bạn muốn biểu thị "số nguyên" thay vì "thập phân", nhưng %d
thường được ưu tiên hơn vì nó cụ thể hơn.
Trên đầu vào, sử dụng scanf()
, bạn có thể sử dụng sử dụng cả hai %i
và %d
. %i
có nghĩa là phân tích cú pháp nó dưới dạng một 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 một 0
hoặc 0x
tiền tố), trong khi %d
có nghĩa là phân tích cú pháp nó dưới dạng số nguyên thập phân.
Dưới đây là một ví dụ về tất cả chúng đang hoạt độ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 cần được cố định, bạn nên sử dụng %d
, %x
hoặc %o
. Đặc biệt, việc một hàng đầu 0
đặt bạn ở chế độ bát phân có thể khiến bạn bắt kịp.
http://en.wikipedia.org/wiki/Printf_format_string dường như nói rằng nó dành cho số thập phân như tôi đã đoán
d,i
int dưới dạng số thập phân có dấu. '% d' và '% i' đồng nghĩa với đầu ra, nhưng khác nhau 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.)