سؤال

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

Come here! where?             not here!

ولكن بدلا من ذلك الحصول على

Come here!                     where? not here!

عندما أستخدم الرمز

cout << left << setw(30) << "Come here!" << " where? " << setw(20) << "not here!" << endl;

لقد قمت بالتأكيد (على ما أعتقد) أن عرض كلا الأعمدة يمكن أن تحتوي على سلسلتين، ولكن بغض النظر عن مدى حجم ضبط عرض الأعمدة، لا يزال الخطأ هناك.

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

المحلول

كما هو موضح، setw() ينطبق فقط على الإدخال التالي، وتحاول تطبيقه على مدخلتين.

بديل للاقتراحات الأخرى التي تمنحك فرصة لاستخدام المتغيرات بدلا من الثوابت الحرفية:

#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;

int main()
{
    stringstream ss;
    ss << "Come here!" << " where?";
    cout << left << setw(30) << ss.str() << setw(20) << "not here!" << endl;
    return 0;
}

نصائح أخرى

يجب عليك طباعة محتويات كل عمود كسلسلة واحدة، بدلا من سلاسل متعددة متتالية، لأن setw() فقط تنسيق السلسلة التالية التي سيتم طباعتها. لذلك يجب عليك تسلسل السلاسل قبل الطباعة، باستخدام مثل string::append() أو +:

cout << left << setw(30) << (string("Come here!") + " where? ") << setw(20) << "not here!" << endl;

setw يغطي فقط السلسلة التالية، لذلك ستحتاج إلى تسلسلها.

cout << left << setw(30) << (string("Come here!") + string(" where? ")) << setw(20) << "not here!" << endl;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top