سؤال

وكيف يمكنني وحة سلسلة مع مسافات على اليسار عند استخدام printf؟

وعلى سبيل المثال، أريد أن طباعة "مرحبا" مع 40 المساحات التي سبقته.

وكما أن سلسلة أريد طباعة يتألف من عدة أسطر. هل أنا بحاجة إلى طباعة كل خط على حدة؟

وتحرير: فقط أن تكون واضحة، أريد بالضبط 40 المساحات المطبوعة قبل كل سطر

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

المحلول

إذا كنت تريد أن كلمة "مرحبا" للطباعة في عمود هذا 40 حرفا واسعة، مع مسافات حشوة اليسار، استخدم ما يلي.

char *ptr = "Hello";
printf("%40s\n", ptr);

وهذا سوف تعطيك 35 مسافات، ثم كلمة "مرحبا". هذه هي الطريقة التي قمت بتهيئة الاشياء عندما تعلم كيفية واسعة تريد العمود، ولكن التغييرات البيانات (حسنا، انها <م> طريقة واحدة يمكنك أن تفعل ذلك).

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

نصائح أخرى

ويمكنني استخدام هذه الوظيفة لبمحاذاة أطراف الانتاج بلدي (على سبيل المثال لطباعة هيكل الشجرة). وindent هو عدد المسافات قبل السلسلة.

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}
int space = 40;
printf("%*s", space, "Hello");

وهذا البيان سوف يحتفظون صف من 40 حرفا، سلسلة الطباعة في نهاية الصف (إزالة مسافات إضافية مثل أن إجمالي طول الصف ثابتا عند 40). نفس الشيء يمكن أن تستخدم للحروف والأعداد الصحيحة كما يلي:

printf("%*d", space, 10);
printf("%*c", space, 'x');

وهذه الطريقة باستخدام المعلمة لتحديد المساحات مفيد حيث مطلوب عدد متغير من مسافات. وهذه البيانات لا تزال تعمل مع الحرفية صحيح كما يلي:

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

وآمل أن يساعد هذا شخص مثلي في المستقبل.

إذا كنت تريد بالضبط 40 مسافات قبل سلسلة ثم يجب عليك القيام به فقط:

printf("                                        %s\n", myStr );

وإذا كان هذا هو قذرة جدا، يمكنك أن تفعل (ولكنه سيكون أبطأ من كتابة المساحات 40 يدويا):     printf("%40s%s", "", myStr );

إذا كنت تريد السلسلة إلى أن اصطف في العمود 40 (أي ما يصل إلى 39 المساحات الشروع أنه من النوع الذي لحق معظم حرف في عمود 40) ثم القيام بذلك:     printf("%40s", myStr);

ويمكنك أيضا وضع "حتى" 40 المساحات بعد سلسلة عن طريق القيام:     printf("%-40s", myStr);

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