در زبان C، مشخصههای قالببندی یا Format Specifiers نشاندهندههایی هستند که به تابع printf() میگویند که یک متغیر از چه نوع دادهای را باید چاپ کند و چگونه آن را نمایش دهد . این مشخصهها همیشه با علامت درصد (%) شروع میشوند و درون رشتهٔ قالببندی (Format String) قرار میگیرند .
ساختار کلی یک مشخصهٔ قالببندی به این شکل است :
%[flags][width][.precision][length]specifier
تنها بخش اجباری، همان specifier نهایی است که نوع داده را تعیین میکند .
| مشخصه | نوع داده | توضیح | مثال |
|---|---|---|---|
%d یا %i | int | اعداد صحیح با علامت در مبنای ۱۰ | printf("%d", 25); → 25 |
%u | unsigned int | اعداد صحیح بدون علامت در مبنای ۱۰ | printf("%u", 40000); → 40000 |
%f | float | اعداد اعشاری | printf("%f", 3.14); → 3.140000 |
%lf | double | اعداد اعشاری با دقت بالا | printf("%lf", 3.14159); → 3.141590 |
%c | char | یک کاراکتر | printf("%c", 'A'); → A |
%s | char* (رشته) | یک رشتهٔ متنی | printf("%s", "Hello"); → Hello |
%p | void* (پوینتر) | آدرس حافظه به صورت هگزادسیمال | printf("%p", &x); → 0x7ffc... |
%x / %X | unsigned int | اعداد هگزادسیمال (حروف کوچک/بزرگ) | printf("%x", 255); → ff |
%o | unsigned int | اعداد اکتال (مبنای ۸) | printf("%o", 8); → 10 |
%e / %E | float / double | نمایش علمی (با e کوچک/بزرگ) | printf("%e", 1000); → 1.000000e+03 |
%% | - | چاپ خود علامت درصد | printf("%%"); → % |
هر مشخصه در رشتهٔ قالببندی با یک آرگومان اضافی در printf() مطابقت دارد. ترتیب آرگومانها بسیار مهم است و باید با ترتیب مشخصهها همخوانی داشته باشد :
int age = 25; float height = 1.75; char grade = 'A'; printf("Age: %d, Height: %f, Grade: %c\n", age, height, grade); // خروجی: Age: 25, Height: 1.750000, Grade: A
نکته: اگر تعداد آرگومانها با تعداد مشخصهها همخوانی نداشته باشد، یا نوع آنها با مشخصه مطابقت نداشته باشد، رفتار برنامه تعریفنشده (Undefined Behavior) خواهد بود .
در C، برخی انواع داده با یکدیگر سازگاری دارند و میتوان از مشخصههای مختلف برای یک متغیر استفاده کرد. بهعنوان مثال، یک char در حقیقت یک عدد صحیح کوچک (۰ تا ۲۵۵) است، بنابراین میتوان آن را هم با %c و هم با %d چاپ کرد :
int num = 72; char ch = 'A'; printf("num as int: %d\n", num); // خروجی: 72 printf("num as char: %c\n", num); // خروجی: H (ASCII 72 = 'H') printf("ch as char: %c\n", ch); // خروجی: A printf("ch as int: %d\n", ch); // خروجی: 65 (ASCII 'A' = 65)
میتوان با افزودن اعداد بین % و مشخصهٔ نهایی، نحوهٔ نمایش خروجی را کنترل کرد :
حداقل تعداد کاراکترهایی را که برای نمایش یک مقدار استفاده میشود، مشخص میکند:
printf("|%5d|\n", 42); // خروجی: | 42| (چهار فاصله قبل از عدد) printf("|%-5d|\n", 42); // خروجی: |42 | (چهار فاصله بعد از عدد - چپچین)
مشخصهٔ - باعث میشود خروجی در فضای تعیینشده، چپچین شود .
معنای دقت بسته به نوع داده متفاوت است :
برای اعداد اعشاری: تعداد ارقام بعد از اعشار را مشخص میکند
برای اعداد صحیح: حداقل تعداد ارقامی که نمایش داده میشود (در صورت نیاز با صفر پر میشود)
برای رشتهها: حداکثر تعداد کاراکترهایی که از رشته نمایش داده میشود
printf("%.3f\n", 3.14159); // خروجی: 3.142 (گرد شده) printf("%.5d\n", 99); // خروجی: 00099 (با صفر پر شده) printf("%.3s\n", "abcdef"); // خروجی: abc (فقط ۳ کاراکتر اول)
میتوان عرض و دقت را همزمان استفاده کرد:
printf("|%8.2f|\n", 3.14159); // خروجی: | 3.14| (عرض ۸، ۲ رقم اعشار)
برای چاپ انواع داده با اندازههای متفاوت (مانند long یا short)، از اصلاحکنندههای طول استفاده میشود :
| اصلاحکننده | کاربرد | مثال |
|---|---|---|
l (L کوچک) | برای long int یا double | %ld, %lu, %lf |
ll | برای long long int | %lld, %llu |
h | برای short int | %hd, %hu |
L (L بزرگ) | برای long double | %Lf |
long int big = 1000000L; long long int very_big = 10000000000LL; short int small = 1000; printf("Long: %ld\n", big); // خروجی: Long: 1000000 printf("Long Long: %lld\n", very_big); // خروجی: Long Long: 10000000000 printf("Short: %hd\n", small); // خروجی: Short: 1000
#include <stdio.h> int main() { char name[] = "Ali"; int age = 30; float salary = 45000.75; printf("Name: %s\n", name); printf("Age: %d\n", age); printf("Salary: $%.2f\n", salary); // ۲ رقم اعشار با نماد دلار return 0; }
#include <stdio.h> int main() { printf("%-10s %-10s %-10s\n", "Product", "Price", "Stock"); printf("%-10s %10.2f %10d\n", "Apple", 0.50, 100); printf("%-10s %10.2f %10d\n", "Orange", 0.75, 80); printf("%-10s %10.2f %10d\n", "Banana", 0.30, 150); return 0; }
خروجی:
Product Price Stock Apple 0.50 100 Orange 0.75 80 Banana 0.30 150
#include <stdio.h> int main() { int num = 255; printf("Decimal: %d\n", num); // 255 printf("Hexadecimal: %x\n", num); // ff printf("Hexadecimal (uppercase): %X\n", num); // FF printf("Octal: %o\n", num); // 377 printf("Scientific: %e\n", num); // 2.550000e+02 return 0; }
float pi = 3.14; printf("%d", pi); // ❌ خروجی نامشخص (معمولاً عددی تصادفی)
printf("Value: %d"); // ❌ خروجی نامشخص (آرگومان وجود ندارد)
int a = 10, b = 20; printf("a=%d, b=%d\n", b, a); // ✅ کامپایل میشود ولی خروجی اشتباه است: a=20, b=10
مشخصههای قالببندی با % شروع میشوند و نوع دادهٔ متغیر را مشخص میکنند
تعداد مشخصهها باید با تعداد آرگومانهای اضافی در printf() برابر باشد
با استفاده از عرض و دقت میتوان خروجی را فرمتبندی کرد
اصلاحکنندههای طول (l, ll, h, L) برای انواع داده با اندازههای خاص استفاده میشوند
ترتیب آرگومانها با ترتیب مشخصهها مطابقت دارد و جابهجایی آنها باعث خطای منطقی میشود
استفاده از \n در انتهای رشتهٔ قالببندی یک رویهٔ استاندارد است
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات