سؤال

لقد بحثت عن هذا قليلاً ولكني لم أحصل على إجابة مباشرة بشكل خاص.في C (وأعتقد C++)، كيف يمكنك تحديد ما يأتي بعد % عند الاستخدام printf؟.على سبيل المثال:

double radius = 1.0;
double area = 0.0;
area = calculateArea( radius );
printf( "%10.1f     %10.2\n", radius, area );

أخذت هذا المثال مباشرة من كتاب لدي عن لغة C.هذا لا معنى له بالنسبة لي على الإطلاق.من أين أتيت 10.1f و 10.2f؟هل يمكن لأحد أن يشرح هذا؟

هل كانت مفيدة؟

المحلول

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders هو مرجع ويكيبيديا للعناصر النائبة للتنسيق في printf. http://www.cplusplus.com/reference/clibrary/cstdio/printf.html مفيد أيضًا

بشكل أساسي، في شكل بسيط، يكون %[العرض].[الدقة][النوع].يتيح لك العرض التأكد من أن المتغير الذي تتم طباعته له طول معين على الأقل (مفيد للجداول وما إلى ذلك).تسمح لك الدقة بتحديد الدقة التي تتم طباعة الرقم عليها (على سبيل المثال.المنازل العشرية وما إلى ذلك) ويبلغ C/C++ ما هو المتغير الذي قدمته (حرف، عدد صحيح، مزدوج وما إلى ذلك).

أتمنى أن يساعدك هذا

تحديث:

للتوضيح باستخدام الأمثلة الخاصة بك:

printf( "%10.1f     %10.2\n", radius, area );

%10.1f (بالإشارة إلى الوسيطة الأولى:نصف القطر) يعني جعله مكونًا من 10 أحرف (أي.لوحة بها مسافات)، ثم قم بطباعتها كعدد عشري بمنزلة عشرية واحدة.

%10.2 (بالإشارة إلى الوسيطة الثانية:Area) تعني جعلها مكونة من 10 أحرف (كما هو مذكور أعلاه) وطباعتها بمنزلتين عشريتين.

نصائح أخرى

man 3 printf

على نظام Linux سوف يوفر لك كل المعلومات التي تحتاجها.يمكنك أيضًا العثور على صفحات الدليل هذه عبر الإنترنت، على سبيل المثال على http://linux.die.net/man/3/printf

10.1f يعني نقطة عائمة بمكان واحد بعد العلامة العشرية و10 منازل قبل العلامة العشرية.إذا كان الرقم يحتوي على أقل من 10 أرقام، فسيتم ملئه بمسافات.10.2f هو نفسه، ولكن مع وجود منزلتين بعد العلامة العشرية.

في كل نظام رأيته، من Unix إلى Rails Migrations، لم يكن هذا هو الحال.@ robintw يعبر عن ذلك بشكل أفضل:

بشكل أساسي، في شكل بسيط، يكون %[العرض].[الدقة][النوع].

أي ليس "10 أماكن". قبل العلامة العشرية"، ولكن "10 منازل، قبل وبعد، وبما في ذلك العلامة العشرية."

10.1f تعني نقطة عائمة بعرض 10 أحرف مع مكان واحد بعد العلامة العشرية.إذا كان الرقم يحتوي على أقل من 10 أرقام، فسيتم ملئه بمسافات.10.2f هو نفسه، ولكن مع وجود منزلتين بعد العلامة العشرية.

لديك هذه الأنواع الأساسية:

%d   - integer
%x   - hex integer
%s   - string
%c   - char (only one)
%f   - floating point (float)
%d   - signed int (decimal)
%i   - signed int (integer) (same as decimal).
%u   - unsigned int
%ld  - long (signed) int
%lu  - long unsigned int
%lld - long long (signed) int
%llu - long long unsigned int

يحرر:هناك العديد من الأشخاص الآخرين المدرجين في رد @Eli (الرجل 3 printf).

باختصار، تلك القيم بعد % تخبرنا printf كيفية تفسير (أو إخراج) جميع المتغيرات التي تأتي لاحقًا.في المثال الخاص بك، radius يتم تفسيره على أنه عائم (هذا هو "f")، و 10.1 يوفر معلومات حول عدد المنازل العشرية التي سيتم استخدامها عند طباعتها.

يرى هذا الرابط لمزيد من التفاصيل حول كافة المعدلات التي يمكنك استخدامها مع printf.

10.1و يعني أنك تريد عرض أ Fاستمتع مع 1 العشري ويجب أن يكون الرقم المعروض 10 الحروف طويلة.

تحتوي صفحات الرجل على المعلومات التي تريدها.لقراءة ما لديك أعلاه:

printf( "%10.2f", 1.5 )

سيؤدي هذا إلى طباعة:

         1.50

بينما:

printf("%.2f", 1.5 )

مطبوعات:

1.50

لاحظ مبرر كليهما.بصورة مماثلة:

printf("%10.1f", 1.5 )

سوف طباعة:

        1.5

أي رقم بعد .هي الدقة التي تريد طباعتها.أي رقم قبل .هي المسافة من الهامش الأيسر.

إحدى القضايا التي لم يثيرها الآخرون هي ما إذا كان مزدوج هو نفس أ يطفو.في بعض الأنظمة، كانت هناك حاجة إلى محدد تنسيق مختلف للصيغة المزدوجة مقارنةً بالتعويم.لأسباب ليس أقلها أن المعلمات التي تم تمريرها يمكن أن تكون بأحجام مختلفة.

 %f - float
 %lf - double
 %g - double

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top