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 printfcuộc gọi. %s, %p, %fTấ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 printfcuộc gọi. %s, %p, %fTấ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à %oin ở 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 %inhư 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 %dthườ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 %ivà %d. %icó 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 0hoặc 0xtiền tố), trong khi %dcó 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 %inế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, %xhoặ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.)