انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: چجوری میشه آخرین کاراکتر چاپ شده تو ++c رو پاک کرد؟ (حل شد)  (دفعات بازدید: 4727 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین حامد سپهر

  • High Hero Member
  • *
  • ارسال: 1556
  • جنسیت : پسر
من یه برنامه کوچولو با ++c نوشتم ونیاز دارم که آخرین کارکتری رو که به عنوان نتیجه به کاربر نشون میده رو پاک کنم. راهی و یا دستوری برای انجام این کار هست؟
« آخرین ویرایش: 31 تیر 1392، 11:41 ب‌ظ توسط حامد سپهر »

آفلاین fond

  • Full Member
  • *
  • ارسال: 144
cout << "\b";

آفلاین حامد سپهر

  • High Hero Member
  • *
  • ارسال: 1556
  • جنسیت : پسر

آفلاین fond

  • Full Member
  • *
  • ارسال: 144
b\ همون backspace هست. این رو اجرا کنید:

cout << "Hello, world";
        cout << "\b\b\b";

سه تا کاراکتر آخر رو پاک می‌کنه. احتمالا مشکل از جای دیگه‌ای هست. اگه کدتون کوچیکه، و البته اگه براتون مهم نیست که کس دیگه‌ای اون رو ببینه، اینجا paste اش کنید تا با کمک دوستان بررسی کنیم و ببینیم شاید راه حل دیگه‌ای هم بود.

آفلاین عدس

  • Jr. Member
  • *
  • ارسال: 84
  • جنسیت : پسر
string a = "abcde";cout << a.substr(0 ,a.size() - 1);
اشک هایی که پس از هر شکست میریزیم ....
همان عرقی است که برای پیروزی نریخته ایم.
هیتلر

آفلاین حامد سپهر

  • High Hero Member
  • *
  • ارسال: 1556
  • جنسیت : پسر
b\ همون backspace هست. این رو اجرا کنید:

cout << "Hello, world";
        cout << "\b\b\b";

سه تا کاراکتر آخر رو پاک می‌کنه. احتمالا مشکل از جای دیگه‌ای هست. اگه کدتون کوچیکه، و البته اگه براتون مهم نیست که کس دیگه‌ای اون رو ببینه، اینجا paste اش کنید تا با کمک دوستان بررسی کنیم و ببینیم شاید راه حل دیگه‌ای هم بود.

واقعا جالبه! این کد شما رو که اجرا میکنم سه کاراکتر آخر رو حذف میکنه! ولی رو کد من جواب نمیده!

برنامه‌ای هم که من نوشتم خیلی سادست! رشته اعداد فیبوناچی رو چاپ میکنه. البته قبلش میپرسه که چند رشته اول میخواین چاپ بشه. کدی هم که براش نوشتم اینه:

#include <iostream>
using namespace std;
main ()
{
int a=1,b=1,c,n;
cout << "Chand adad? (min=2) ";
cin >> n;
cout << "1, 1, ";
if (n>2)
for (int i=2;i<n;i++)
{
c=a+b;
cout << c << ", ";
a=b;
b=c;
}
cout << "\b\b";
cout << endl;
}

الآن اگه ۵عدد اول رو بخواین خروجی این میشه:
1, 1, 2, 3, 5,
من میخوام اون , که آخر هست پاک بشه.

آفلاین عدس

  • Jr. Member
  • *
  • ارسال: 84
  • جنسیت : پسر
b\ همون backspace هست. این رو اجرا کنید:

cout << "Hello, world";
        cout << "\b\b\b";

سه تا کاراکتر آخر رو پاک می‌کنه. احتمالا مشکل از جای دیگه‌ای هست. اگه کدتون کوچیکه، و البته اگه براتون مهم نیست که کس دیگه‌ای اون رو ببینه، اینجا paste اش کنید تا با کمک دوستان بررسی کنیم و ببینیم شاید راه حل دیگه‌ای هم بود.


واقعا جالبه! این کد شما رو که اجرا میکنم سه کاراکتر آخر رو حذف میکنه! ولی رو کد من جواب نمیده!

برنامه‌ای هم که من نوشتم خیلی سادست! رشته اعداد فیبوناچی رو چاپ میکنه. البته قبلش میپرسه که چند رشته اول میخواین چاپ بشه. کدی هم که براش نوشتم اینه:

#include <iostream>
using namespace std;
main ()
{
int a=1,b=1,c,n;
cout << "Chand adad? (min=2) ";
cin >> n;
cout << "1, 1, ";
if (n>2)
for (int i=2;i<n;i++)
{
c=a+b;
cout << c << ", ";
a=b;
b=c;
}
cout << "\b\b";
cout << endl;
}

الآن اگه ۵عدد اول رو بخواین خروجی این میشه:
1, 1, 2, 3, 5,
من میخوام اون , که آخر هست پاک بشه.

اون دوتا دستوری که نوشتم رو امتحان کردین ؟
جواب میده ها‌!!!!!!!! :'(
اشک هایی که پس از هر شکست میریزیم ....
همان عرقی است که برای پیروزی نریخته ایم.
هیتلر

آفلاین fond

  • Full Member
  • *
  • ارسال: 144
توی اون خط این رو بنویسید:

cout << "\b\b ";
من پیشنهاد می‌کنم به عنوان تمرین بیشتر در مورد کد آقای مرتضی تحقیق کنید. مطمئنم اطلاعات جالبی در مورد رشته ها بدست می یارید.
« آخرین ویرایش: 31 تیر 1392، 04:48 ب‌ظ توسط fond »

آفلاین آرمان

  • Jr. Member
  • *
  • ارسال: 60
  • جنسیت : پسر
با این تغییر تو کد کاراکتر آخر اصلا چاپ نمی شه که بخواد پاک بشه(یه جورایی تقلب کردم  :D):
#include <iostream>
using namespace std;
int main ()
{
int a=1,b=1,c,n;
cout << "Chand adad? (min=2) ";
cin >> n;
cout << "1, 1";
if (n>2)
for (int i=2;i<n;i++)
{
c=a+b;
cout << ", "<<c;
a=b;
b=c;
}
cout << endl;
return 0;
}

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
توی Qt Creator :
QString x = "aab";
QString y = x.left(x.length()-1);

الان b حذف میشه و aa در متغیر y قرار می گیره .
به عمل کار برآید     به سخندانی نیست . . .

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
توی اون خط این رو بنویسید:

cout << "\b\b ";
من پیشنهاد می‌کنم به عنوان تمرین بیشتر در مورد کد آقای مرتضی تحقیق کنید. مطمئنم اطلاعات جالبی در مورد رشته ها بدست می یارید.

این هم حواب نمیده! قانونا هم باید اسپیس اخر و هم , رو پاک کنه! اما در عمل این اتفاق نمیافته :D
شما دلیلشو میدونی؟ اگه میدونید یه راهنمایی کنید بریم ببینیم \را این تفاق میافته

آفلاین سید مسعود امامیان

  • Hero Member
  • *
  • ارسال: 951
    string test = "anjomane ubuntu" ;

    cout << test << endl ;
    test.resize(test.size()-1);
    cout << test << endl ;

خروجی :
anjomane ubuntu
anjomane ubunt
به عمل کار برآید     به سخندانی نیست . . .

آفلاین fond

  • Full Member
  • *
  • ارسال: 144
روی سیستم من جواب میده. (کامپایلر gcc 4.2)
$ cat fib.cxx                     
#include <iostream>
using namespace std;
main ()
{
        int a=1,b=1,c,n;
        cout << "Chand adad? (min=2) ";
        cin >> n;
        cout << "1, 1, ";
        if (n>2)
                for (int i=2;i<n;i++)
                {
                        c=a+b;
                        cout << c << ", ";
                        a=b;
                        b=c;
                }
        cout << "\b\b ";
        cout << endl;
}
$ c++ fib.cxx
$ ./a.out                     
Chand adad? (min=2) 3
1, 1, 2 


این کد رو ببینید:

        cout << "\b\b ";
        cout << endl;


b\ یدونه نشانگر رو برمیگردونه عقب اما چیزی رو پاک نمیکنه. (فقط نشانگر رو برمیگردونه عقب) توی دستور بالا نشانگر دو تا برمیگرده عقب و روی کاراکتر , قرار میگیره. بعدش یدونه space چاپ میشه و کاراکتر , پاک میشه.

دلیل اینکه کد قبلا کار نمی کرد این بود که:


        cout << "\b\b";
        cout << endl;

اینجا نشانگر دو بار برمیگرده عقب. اما نکته اینجاست که خط دوم n\ رو چاپ می‌کنه و بنابراین بدون اینکه چیزی پاک شده باشه میره خط بعدی. به عبارت دیگه، نشانگر دو تا میره عقب روی , می‌ایسته، اما بعدش n\ چاپ میشه و میره خط بعدی؛ بدون اینکه توی خط قبل چیزی پاک بشه.
« آخرین ویرایش: 31 تیر 1392، 06:19 ب‌ظ توسط fond »

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
قبل از اینکه جواب آقای fond رو ببینم این رو نوشتم؛ با عرض پوزش از fond عزیز
-------------

آقا کشف به عمل اومد

کد دوستمون در این خط
cout << c << ", ";
یکبار کاراکتر , و سپس یک فاصله خالی رو چاپ میکنه؛ پس برای پاک کردنش باید ۲ کاراکتر آخر رو پاک کنیم؛ یعنی همون چیزی که اقای fond فرمودند!

حالا وقتی از
cout << "\b\b";
قانونا (قانون از دید خودمون :D) انتظار داریم که ۲ کاراکتر پاک بشه! اما میبینیم نمیشه!
خب مشکل کجاست؟ مشکل اینه که کاراکترامون رو پاک نمیکنه و فقط نشانه گر رو ۲ واحد میره به عقب!
پس اگه الان از کد زیر استفاده کنیم:
cout << "\b\b  ";نتیجه این میشه که ۲ واحد کاراکتر میره عقب و دو کاراکتر space روی کاراکترامون چاپ میکنه! در نتیجه کاراکترامون پاک میشن :D

حالا سوال اینجاست؛ که چرا؟ مگه b\ نباید کاراکترامون رو پاک کنه؟!
« آخرین ویرایش: 31 تیر 1392، 06:23 ب‌ظ توسط B »

آفلاین fond

  • Full Member
  • *
  • ارسال: 144
حالا سوال اینجاست؛ که چرا؟ مگه b\ نباید کاراکترامون رو پاک کنه؟!
نه. این کد رو اجرا کنید:
cout << "Hello, world";
        cout << "\b\b\b";

اینجا بدون space به نتیجه دلخواه میرسیم چرا؟ اینجا نشانگر سه تا برمیگرده عقب، بعدش از برنامه خارج میشه و prompt شل ظاهر میشه. یعنی prompt شل سه تا کاراکتر آخر رو بازنویسی می‌کنه. (چون نشانگر سه تا رفته بود عقب) اگه بعد از خروج برنامه prompt شل چاپ نشه، کاراکترها هم پاک نمیشن. توضیح این یکم سخت برای من ... امیدوارم منظور رو رسونده باشم.