| (1) | |
int printf(constchar*format, ... ); | | (حتى C99) |
int printf(constchar*restrict format, ... ); | | (منذ C99) |
| (2) | |
int fprintf( FILE *stream, constchar*format, ... ); | | (حتى C99) |
int fprintf( FILE *restrict stream, constchar*restrict format, ... ); | | (منذ C99) |
| (3) | |
int sprintf(char*buffer, constchar*format, ... ); | | (حتى C99) |
int sprintf(char*restrict buffer, constchar*restrict format, ... ); | | (منذ C99) |
int snprintf(char*restrict buffer, int bufsz, constchar*restrict format, ... ); | (4) | (منذ C99) |
| | |
تحمل البيانات من المواضع المحددة, وتحولها إلى سلسلة حروف ثم تخرج الناتج إلى مكان ما.
1) تكتب الناتج في تيار الإخراج القياسي stdout.
2) تكتب الناتج في تيار الإخراج stream
.
3) تكتب الناتج في المصفوفة buffer
. السلوك غير معرف حال كون المصفوفة buffer
لا تكفي حجم الناتج (بما فيه حرف الـ '\0' في الآخر).
4) كتب الناتج في المصفوفة buffer
. لا يتم كتابة أكثر من bufsz
- 1 من الحروف يتم اضافة '\0' الى آخر المصفوفة مالم تكن bufs
بصفر.
stream | - | تيار الإخراج الذي ستتم فيه الكتابة |
buffer | - | مؤشر إلى سلسلة من الحروف منتهية بـ'\0' ستتم الكتابة فيها |
bufsz | - | الحد الأقصى لعدد الحروف التي ستكتب شاملة '\0' |
format | - | مؤشر إلى سلسلة من الحروف منتهية بـ'\0' تبين كيفية فهم المعطيات . تتكون سلسلة التنسيق (format string) من حروف عادية (عدا %) يتم نسخها بدون تعديل إلى تيار الإخراج ومن علامات تحويل. كل علامة تحويل تكون على الهيئة الآتية:
- (اختياري) علامة أو أكثر تغير من سلوك التحويل
- -: يتم المحازاة ناحية اليسار داخل المكان المتاح (في العادة تكون المحازاة جهة اليمين)
- +: يتم إظهار إشارة الأعداد ذات إشارة حتى لو كانت موجبة (في العادة لا تتم طباعة الإشارة إلا للأعداد السالبة)
- (مسافة): يتم وضع مسافة في الموضع المفترض للإشارة الموجبة. يتم تجاهل هذه العلامة في حال وجود +.
- #: يتم إجراء تحويل بديل. أنظر الجدول لمزيد من التفاصيل.
- 0: في تحويلات الأعداد الصحيحة وذات الفاصلة العائمة يدل الصفر على الشمال على أنه يلزم استخدام أصفار بدلا من مسافات لملء الفراغ عند المحازاة. سلوك استخدام العلامة مع تحويلات أخرى غير معرف. يتم تجاهل العلامة إذا كان العدد فاصلة عائمة ومحدد صراحة الدقة المطلوبة أو إذا وجدت علامة
- .
- (اختياري) عدد صحيح أو
* تحدد أقل سعة لممكان العرض. تتم المحازاة دخل المكان باستخدام مسافات. في حالة استخدام * يتم قراءة الإزاحة من معطى إضافي من النوع int. اذا كان المعطى سالبا يتم ادراج العلامة - واعتبار الازاحة عددا موجبا.
- (اختياري) . متبوعة بعدد صحيح أو * تحدد دقة التحويل. في حالة استخدام
* يتم قراءة الدقة من معطى إضافي من النوع int. اذا كان المعطى سالبا يتم تجاهله. انظر الجدول بالأسفل لكامل التفاصيل بخصوص الدقة.
- (اختياري)طول المدخل يحدد طول المعطى
- نوع التحويل (conversion format specifier)
توجد الأنواع التالية من التحويلات: نوع التحويل | الشرح | نوع المعطى |
---|
طول المدخل | hh | h | بدون | l | ll | j | z | t | L |
---|
% | تكتب الرمز %. هذه هي الصيغة الكاملة: %%. | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م |
---|
c | - تكتب حرف وحيد.
يتم تحويل المعطى إلى unsignedchar. عند استعمال الطول l يتم تحويل المعطى بنفس شروط %ls مع معط من النوع wchar_t[2]. | غ\م | غ\م | | | غ\م | غ\م | غ\م | غ\م | غ\م |
---|
s | - تكتب سلسلة حرفية
يجب أن يكون المعطى مؤشر على أول عنصر في مصفوفة الحروف. الدقة تحدد الحد الأقصى من الحروف التي ستكتب. في حالة عدم تحديد الدقة يتم كتابة كل الحروف حتى الوصول إلى حرف '\0') '\0' لا تكتب). عند استعمال الطول l يجب ان يكون المعطى مؤشر على أول عنصر في مصفوفة نوعها wchar_t. يتم تحويل هذه المصفوفة إلى مصفوفة حروف ضيقة باستخدام wcrtomb. | غ\م | غ\م | | | غ\م | غ\م | غ\م | غ\م | غ\م |
---|
d
i | - تحول a signed integer إلى الصورة الرقمية العشرية [-]dddd.
الدقة تعبر عن أصغر عدد من الأرقام يجب كتابتها الدقة الاعتيادية هي 1. إذا كانت كل من القيمة المحولة والدقة تساوي 0 تكون نتيجة التحويل خالية | | | | | | | | | غ\م |
---|
o | - تحول a unsigned integer إلى الصورة الرقمية الثمانية oooo.
الدقة تعبر عن أصغر عدد من الأرقام يجب كتابتها الدقة الاعتيادية هي 1. إذا كانت كل من القيمة المحولة والدقة تساوي 0 تكون نتيجة التحويل خالية في التحويل البديل يتم دائما كتابة صفر على الشمال دلالة على أن العدد octal. في حالة أن المعطى صفر يتم كتابة '0' واحدة. | | | | | | | | unsigned version of ptrdiff_t | غ\م |
---|
x
X | - تحول unsigned integer إلى الصورة الرقمية الستةعشرية hhhh.
عند استخدام التحويل x يتم استعمال الحروف abcdef . عند استخدام التحويل X يتم استعمال الحروف ABCDEF . الدقة تعبر عن أصغر عدد من الأرقام يجب كتابتها الدقة الاعتيادية هي 1. إذا كانت كل من القيمة المحولة والدقة تساوي 0 تكون نتيجة التحويل خالية في التحويل البديل يتم كتابة 0x أو 0X أمام العدد المحول مالم يساوي الصفر. | غ\م |
---|
u | - تحول an unsigned integer إلى الصورة الرقمية العشرية dddd.
الدقة تعبر عن أصغر عدد من الأرقام يجب كتابتها الدقة الاعتيادية هي 1. إذا كانت كل من القيمة المحولة والدقة تساوي 0 تكون نتيجة التحويل خالية | غ\م |
---|
f
F | - تحول floating-point number إلى الصورة الرقمية العشرية على هذه الشاكلة: [-]ddd.ddd.
الدقة تحدد أقل عدد يجب كتابته بعد الفاصلة العشرية. الدقة الاعتيادية هي 6. في التحويل البديل يتم كتابة الفاصلة بغض النظر عن وجود جزء كسري. بالنسبة لـقيم infinity و NaN أنظر الملحوظات. | غ\م | غ\م | | | غ\م | غ\م | غ\م | غ\م | |
---|
e
E | - تحول floating-point number إلى الصورة الأسية العشرية.
عند استخدام التحويل e يتم استعمال الصيغة [-]d.ddde±dd . عند استخدام التحويل E يتم استعمال الصيغة [-]d.dddE±dd . الجزء الأسي يكون ذو رقمين على الأقل وربما يزيد عن ذلك عند الحاجة. إذا كان المعطى صفر يكون الأس صفر كذلك. الدقة تحدد أقل عدد يجب كتابته بعد الفاصلة العشرية. الدقة الاعتيادية يتم اختيارها بحيث تكفي للتعبير عن العدد دون تقريب. في التحويل البديل يتم كتابة الفاصلة بغض النظر عن وجود جزء كسري. بالنسبة لـقيم infinity و NaN أنظر الملحوظات. | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م |
---|
a
A | - تحول floating-point number إلى الصورة الأسية الستةعشرية.
عند استخدام التحويل a يتم استعمال الصيغة [-]0xh.hhhp±d . عند استخدام التحويل A يتم استعمال الصيغة [-]0Xh.hhhP±d . The first hexadecimal digit is 0 if the argument is not a normalized floating point value. عند استعمال الطول value is 0, the exponent is also 0. الدقة تحدد أقل عدد يجب كتابته بعد الفاصلة العشرية. الدقة الاعتيادية يتم اختيارها بحيث تكفي للتعبير عن العدد دون تقريب. في التحويل البديل يتم كتابة الفاصلة بغض النظر عن وجود جزء كسري. بالنسبة لـقيم infinity و NaN أنظر الملحوظات. | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م |
---|
g
G | - تحول floating-point number to decimal or decimal exponent notation depending on the value and the precision.
عند استخدام التحويل g يتم استعمال الصيغة conversion with style e or f will be performed. عند استخدام التحويل G يتم استعمال الصيغة conversion with style E or F will be performed. Let P equal the precision if nonzero, 6 if the precision is not specified, or 1 if the precision is 0. Then, if a conversion with style E would have an exponent of X : - if P > X ≥ −4, the conversion is with style f or F and precision P − 1 − X.
- otherwise, the conversion is with style e or E and precision P − 1.
Unless alternative representation is requested the trailing zeros are removed, also the decimal point character is removed if no fractional part is right. For infinity and not-a-number يتم استعمال الصيغة see notes. | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م |
---|
n | تُرجع عدد الحروف المكتوبة حتى الآن جراء الإستدعاء الحالي. يتم كتابة الناتج بداخل الكائن المشار إليه من قبل المعطى. هذه هي الصيغة الكاملة: %n. ملحوظة: الكثير من الكومبيلرات لا تطبق هذه التحويلة لدواعي أمنية. | | | | | | | | | غ\م |
---|
p | تكتب سلسلة من الحروف تحددها البيئة تعبر عن مؤشر. | غ\م | غ\م | void* | غ\م | غ\م | غ\م | غ\م | غ\م | غ\م |
---|
- ملحوظات:
تحويلة الأعداد ذات الفاصلة العائمة تحول اللا نهاية الا كلمة inf أو infinity . للبيئة حرية الإختيار بينهم. Not-a-number يتم تحويلها إلى nan أو nan(char_sequence) . للبيئة حرية الإختيار بينهم. التحويلات F و E و G و A تطبع INF و INFINITY و NAN بدلا من ذلك. رغم أن %c تتوقع int كمعطى, إلا أن إمرار char آمن لأنه يتم ترقيته إلى int بسبب وقعه في دالة variadic. التحويلات الصحيحة للأنواع ثابتة الحجم (مثل int8_t وغيره) معرفة في ملف <inttypes.h>. |
|
... | - | المعطيات التي تحدد البيانات المراد كتابتها |
[تعديل]القيمة المُرجعة
1,2) عدد الحروف التي تم ارسالها إلى تيار الإخراج أو قيمة سالبة في حالة حدوث خطأ في الكتابة أو الترميز (عند تحويل الحروف فقط)
3) عدد الحروف التي كتبت في buffer
(لا يتم احتساب '\0' التي في النهاية) أو قيمة سالبة في حالة حدوث خطأ في الترميز (عند تحويل الحروف فقط)
4) عدد الحروف التي كانت ستكتب في buffer
(لا يتم احتساب '\0' التي في النهاية) إذا لم تؤخذ bufsz
في الاعتبار أو قيمة سالبة في حالة حدوث خطأفي الترميز (عند تحويل الحروف فقط)
تحدد POSIX أنه يتم وضع قيمة 1 داخل errno عند حدوث خطأ.
#include <stdio.h> int main(void){ printf("Strings:\n");constchar* s ="Hello"; printf("\t.%10s.\n\t.%-10s.\n\t.%*s.\n", s, s, 10, s); printf("Characters:\t%c %%\n", 65); printf("Integers\n"); printf("Decimal:\t%i %d %.6i %i %.0i %+i %u\n", 1, 2, 3, 0, 0, 4, -1); printf("Hexadecimal:\t%x %x %X %#x\n", 5, 10, 10, 6); printf("Octal:\t%o %#o %#o\n", 10, 10, 4); printf("Floating point\n"); printf("Rounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3); printf("Padding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5); printf("Scientific:\t%E %e\n", 1.5, 1.5); printf("Hexadecimal:\t%a %A\n", 1.5, 1.5);}
الخرج:
Strings: . Hello. .Hello . . Hello. Characters: A % Integers Decimal: 1 2 000003 0 +4 4294967295 Hexadecimal: 5 a A 0x6 Octal: 12 012 04 Floating point Rounding: 1.500000 2 1.30000000000000004440892098500626 Padding: 01.50 1.50 1.50 Scientific: 1.500000E+00 1.500000e+00 Hexadecimal: 0x1.8p+0 0X1.8P+0
[تعديل]أنظر أيضا
| تكتب خرج الى stdout أو تيار ملف (FILE*) أو مصفوفة مستخدمة variable arguments list (دالة)[edit] |
| تكتب سلسلة من الحروف إلى داخل تيار ملف. (دالة)[edit] |
| تقرأ مدخل منسق من stdin أو تيار ملف (FILE*) أو مصفوفة (دالة)[edit] |
|