View Full Version : مشکل با setw
Arashdn
پنج شنبه 05 بهمن 1391, 10:27 صبح
سلام
دوستان من داخل یه حلقه دستور زیر رو نوشتم
out <<left<< setw(25) << date<<"Hello";
date یه استرینگ هست که قبلا تعریف شده و تو هر بار اجرای حلقه یه مقداری میگیره
حالا یه 5-6 تا از این چاپ میکنیم
خروجی مثل عکس زیر میشه
http://www.0up.ir/do.php?imgf=cpp.jpg
اصولا نباید اون Hello وسطی با بقیه در یه ردیف باشه؟؟؟؟
مشکل از چی میتونه باشه؟؟!!
ممنون
coder.php
پنج شنبه 05 بهمن 1391, 11:07 صبح
مشکل بخاطر این هست که همه روز ها تک رقمی هستند اما روز 31 اردیبهشت دو رقمی است به خاطر همین واژه Hello یک کاراکتر از بقیه جلوتر رفته.
Arashdn
پنج شنبه 05 بهمن 1391, 11:18 صبح
خب برای همین از setw استفاده کردم که طول ها مشخص نیست و میخوام یه میدان خروجی به طول 25 برای تاریخ تشکیل بدم .....
coder.php
پنج شنبه 05 بهمن 1391, 11:38 صبح
میشه یک if قرار داد که اگر left نه کاراکتری بود setw(24) اگر ده کاراکتری بود setw(23) اگر هشت کاراکتری بود setw(25)
Arashdn
پنج شنبه 05 بهمن 1391, 11:45 صبح
طول تاریخ اصلا مشخص نیست
نمیشه با if جابجاش کرد ...
اصولا نباید setw خودش این کار رو انجام بده؟
coder.php
پنج شنبه 05 بهمن 1391, 12:10 عصر
اگر left از نوع string هست میشه با left.length() تعداد کاراکتر ها رو بدست آورد فقط قبلش باید سرآیند string رو include کنی
که میشه چیزی شبیه این:
if (left.length() == 9) cout << setw(24);
elseif (left.length() == 10 ) cout << setw(23);
elseif (length() == 8) cout << setw(25);
اگر هم استرینگ نباشه میشه با type casting به string تبدیل کرد
mahak006
پنج شنبه 05 بهمن 1391, 13:10 عصر
طول تاریخ اصلا مشخص نیست
نمیشه با if جابجاش کرد ...
اصولا نباید setw خودش این کار رو انجام بده؟
setw() که کارش این نیست . این تابع به اندازه مقداری که داخلش وارد می کنید ، فاصله وارد می کنه . یعنی شما داری 25 تا space میزنی .
ورودی این تابع ، عدد صحیحه . پس شما بره به دست اومدن تعداد فاصله ی ورودی ، می تونی از یه عملیات جبری که جواب نهاییش عدد می شه استفاده کنی .
cout<<setw(33-left.length());
حالا اگه مقدار تاریخ گرفته شده ، پوچم باشه یا 30 هم باشه :گیج: باز Hello ها زیر هم نوشته می شن .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.