انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: حامد سپهر در 30 تیر 1392، 11:51 بظ
-
من یه برنامه کوچولو با ++c نوشتم ونیاز دارم که آخرین کارکتری رو که به عنوان نتیجه به کاربر نشون میده رو پاک کنم. راهی و یا دستوری برای انجام این کار هست؟
-
cout << "\b";
-
cout << "\b";
جواب نداد :(
-
b\ همون backspace هست. این رو اجرا کنید:
cout << "Hello, world";
cout << "\b\b\b";
سه تا کاراکتر آخر رو پاک میکنه. احتمالا مشکل از جای دیگهای هست. اگه کدتون کوچیکه، و البته اگه براتون مهم نیست که کس دیگهای اون رو ببینه، اینجا paste اش کنید تا با کمک دوستان بررسی کنیم و ببینیم شاید راه حل دیگهای هم بود.
-
string a = "abcde";
cout << a.substr(0 ,a.size() - 1);
-
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,
من میخوام اون , که آخر هست پاک بشه.
-
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,
من میخوام اون , که آخر هست پاک بشه.
اون دوتا دستوری که نوشتم رو امتحان کردین ؟
جواب میده ها!!!!!!!! :'(
-
توی اون خط این رو بنویسید:
cout << "\b\b ";
من پیشنهاد میکنم به عنوان تمرین بیشتر در مورد کد آقای مرتضی تحقیق کنید. مطمئنم اطلاعات جالبی در مورد رشته ها بدست می یارید.
-
با این تغییر تو کد کاراکتر آخر اصلا چاپ نمی شه که بخواد پاک بشه(یه جورایی تقلب کردم :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;
}
-
توی Qt Creator :
QString x = "aab";
QString y = x.left(x.length()-1);
الان b حذف میشه و aa در متغیر y قرار می گیره .
-
توی اون خط این رو بنویسید:
cout << "\b\b ";
من پیشنهاد میکنم به عنوان تمرین بیشتر در مورد کد آقای مرتضی تحقیق کنید. مطمئنم اطلاعات جالبی در مورد رشته ها بدست می یارید.
این هم حواب نمیده! قانونا هم باید اسپیس اخر و هم , رو پاک کنه! اما در عمل این اتفاق نمیافته :D
شما دلیلشو میدونی؟ اگه میدونید یه راهنمایی کنید بریم ببینیم \را این تفاق میافته
-
string test = "anjomane ubuntu" ;
cout << test << endl ;
test.resize(test.size()-1);
cout << test << endl ;
خروجی :
anjomane ubuntu
anjomane ubunt
-
روی سیستم من جواب میده. (کامپایلر 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\ چاپ میشه و میره خط بعدی؛ بدون اینکه توی خط قبل چیزی پاک بشه.
-
قبل از اینکه جواب آقای fond رو ببینم این رو نوشتم؛ با عرض پوزش از fond عزیز
-------------
آقا کشف به عمل اومد
کد دوستمون در این خط
cout << c << ", ";
یکبار کاراکتر , و سپس یک فاصله خالی رو چاپ میکنه؛ پس برای پاک کردنش باید ۲ کاراکتر آخر رو پاک کنیم؛ یعنی همون چیزی که اقای fond فرمودند!
حالا وقتی از
cout << "\b\b";
قانونا (قانون از دید خودمون :D) انتظار داریم که ۲ کاراکتر پاک بشه! اما میبینیم نمیشه!
خب مشکل کجاست؟ مشکل اینه که کاراکترامون رو پاک نمیکنه و فقط نشانه گر رو ۲ واحد میره به عقب!
پس اگه الان از کد زیر استفاده کنیم:
cout << "\b\b ";
نتیجه این میشه که ۲ واحد کاراکتر میره عقب و دو کاراکتر space روی کاراکترامون چاپ میکنه! در نتیجه کاراکترامون پاک میشن :D
حالا سوال اینجاست؛ که چرا؟ مگه b\ نباید کاراکترامون رو پاک کنه؟!
-
حالا سوال اینجاست؛ که چرا؟ مگه b\ نباید کاراکترامون رو پاک کنه؟!
نه. این کد رو اجرا کنید:
cout << "Hello, world";
cout << "\b\b\b";
اینجا بدون space به نتیجه دلخواه میرسیم چرا؟ اینجا نشانگر سه تا برمیگرده عقب، بعدش از برنامه خارج میشه و prompt شل ظاهر میشه. یعنی prompt شل سه تا کاراکتر آخر رو بازنویسی میکنه. (چون نشانگر سه تا رفته بود عقب) اگه بعد از خروج برنامه prompt شل چاپ نشه، کاراکترها هم پاک نمیشن. توضیح این یکم سخت برای من ... امیدوارم منظور رو رسونده باشم.
-
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,
من میخوام اون , که آخر هست پاک بشه.
اون دوتا دستوری که نوشتم رو امتحان کردین ؟
جواب میده ها!!!!!!!! :'(
string test = "anjomane ubuntu" ;
cout << test << endl ;
test.resize(test.size()-1);
cout << test << endl ;
خروجی :
anjomane ubuntu
anjomane ubunt
مسئله اینه که کاراکتر آخری که میخوام چاپ بشه توی اون متغییر نیست. یک بار دیگه کد رو بخونین :)
توی اون خط این رو بنویسید:
cout << "\b\b ";
من پیشنهاد میکنم به عنوان تمرین بیشتر در مورد کد آقای مرتضی تحقیق کنید. مطمئنم اطلاعات جالبی در مورد رشته ها بدست می یارید.
آها! این کار کرد. ممنون از توضیح روش کار این کد \\:D/
با این تغییر تو کد کاراکتر آخر اصلا چاپ نمی شه که بخواد پاک بشه(یه جورایی تقلب کردم :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;
}
خب اینجوری که برادر من باز باید بهش بگم که اولین کاراکتر رو پاک کنه! (راهی هست که بهش بگم اولین کاراکتر رو پاک کنه؟؟)
-
ببخشید من متوجه منظورتون نشدم.
چرا اولین کارکتر پاک شه؟
مگه خروجی به شکلی که می خوایید نیست؟
-
ببخشید من متوجه منظورتون نشدم.
چرا اولین کارکتر پاک شه؟
مگه خروجی به شکلی که می خوایید نیست؟
با برنامه شما، خروجی این میشه:
, 1, 1, 2, 3, 5
که باز اون , که اول چاپ شده مزاحم هست :)
-
ببخشید من متوجه منظورتون نشدم.
چرا اولین کارکتر پاک شه؟
مگه خروجی به شکلی که می خوایید نیست؟
با برنامه شما، خروجی این میشه:
, 1, 1, 2, 3, 5
که باز اون , که اول چاپ شده مزاحم هست :)
می شه اول یه بار کامپایل کنید؟
چون من اصلا این جور خروجی نمی ده و دلیلی هم نداره بده.
لطفا یک بار لطفاکامپایل کنید تا خودتون متوجه بشید.
-
ببخشید من متوجه منظورتون نشدم.
چرا اولین کارکتر پاک شه؟
مگه خروجی به شکلی که می خوایید نیست؟
با برنامه شما، خروجی این میشه:
, 1, 1, 2, 3, 5
که باز اون , که اول چاپ شده مزاحم هست :)
می شه اول یه بار کامپایل کنید؟
چون من اصلا این جور خروجی نمی ده و دلیلی هم نداره بده.
لطفا یک بار لطفاکامپایل کنید تا خودتون متوجه بشید.
اوه...! درسته، حق با شماست :) من اشتباه کردم. اینم یه راه حل بود :) ولی از راه حل استفاده از /b بیشتر خوشم اومد. چون تو همه برنامهها که نمیشه با تغییر کد مشکل رو برطرف کرد ;D