كيفية تنسيق السلاسل باستخدام printf() للحصول على المساواة طول في الإخراج ؟

StackOverflow https://stackoverflow.com/questions/1809399

  •  05-07-2019
  •  | 
  •  

سؤال

لدي اثنين من الوظائف والتي تنتج الرسائل مثل Starting initialization... و آخر والذي يتحقق عودة رموز و النواتج "Ok", "Warning" أو "Error".ومع ذلك الإخراج الذي يتم إنتاجه من طول مختلفة:

Starting initialization...Ok.
Checking init scripts...Ok.

كيف يمكنني الحصول على شيء مثل هذا:

Starting initialization...       Ok.
Checking init scripts...         Ok.
هل كانت مفيدة؟

المحلول

ويمكنك تحديد عرض على حقول السلسلة، على سبيل المثال

printf("%-20s", "initialization...");

وبعد ذلك كل ما هو مطبوع مع هذا المجال سوف تكون فارغة مبطن إلى العرض الذي يشير.

وو- اليسار يبرر النص الخاص بك في هذا المجال.

نصائح أخرى

وprintf يسمح تنسيق مع محددات العرض. منها مثلا.


printf( "%-30s %s\n", "Starting initialization...", "Ok." );

ويمكنك أن استخدام محدد العرض السلبي للإشارة إلى اليسار مبرر لأن الافتراضي إلى استخدام حق تبرير.

وبالإضافة إلى ذلك، إذا كنت تريد مرونة اختيار width، يمكنك الاختيار بين واحد من الأشكال التاليين (مع أو بدون اقتطاع):

int width = 30;
//no truncation uses %-*s
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
// output is "Starting initialization...     Ok."

//truncated to the specified width uses %-.*s
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." ); 
// output is "Starting initialization... Ok."

وهناك أيضا معدل %n التي يمكن أن تساعد في ظروف معينة. تقوم بإرجاع العمود الذي كانت السلسلة حتى الآن. على سبيل المثال: كنت تريد أن تكتب عدة الصفوف التي تقع ضمن عرض الصف الأول مثل الجدول

.
int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);

for(i=0; i<6; i++)
   printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);

وستطبع 2 الأعمدة من نفس العرض مهما كان طول السلسلتين header1 وقد يكون header2. أنا لا أعرف إذا كانت جميع الأجهزة و%n لكن سولاريس ولينوكس القيام به.

وهناك أيضا الحل وليس منخفضة التكنولوجيا العد إضافة مساحات من جهة لجعل رسائلك يصطف. لا شيء يمنعك من بينهم عدد قليل من مسافات زائدة في سلاسل رسالتك.

تبدأ مع استخدام علامات التبويب ، حرف التعديل.وسوف تقدم إلى موقع ثابت (الأعمدة الطرفية لغة).إلا أنه لا يساعد إذا كان هناك اختلافات من أكثر من عرض العمود (4 أحرف, إذا كنت أتذكر بشكل صحيح).

لإصلاح ذلك ، كتابة "موافق/NOK" الأشياء باستخدام عدد محدد من علامات التبويب (5?6?, تحاول ذلك) ، ثم العودة ( ) دون الجديد-بطانة ، ثم اكتب رسالتك.

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