روی سیستم من جواب میده. (کامپایلر 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\ چاپ میشه و میره خط بعدی؛ بدون اینکه توی خط قبل چیزی پاک بشه.