星期三, 11月 14, 2007

由turbo c移植出來的程式可能的問題:clrscr等五個函數

error C2065: 'clrscr' : undeclared identifier
error C2065: 'delay' : undeclared identifier
error C2065: 'randomize' : undeclared identifier
error C2065: 'random' : undeclared identifier
error C2065: 'gotoxy' : undeclared identifier

那五個函數正是turbo c內的函數,但不是ansi c 標準的函數

randomize() 可用 srand((unsigned)time(0)) 代替
(但須引用 ).

random(N) 可以用 (rand() % N) 來取代.

最接近 delay() 的是sleep(). (不過若是C++,則是Sleep())

gotoxy() 跟 clrscr() 在視窗系統上要用 console API (需要 ) 來做,
我建議用同名的函式把 API 包起來

void gotoxy(short int x, short int y)
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord = {x, y};
SetConsoleCursorPosition(hStdOut, coord);
}

void clrscr()
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hStdOut, &csbi);

COORD coord = {0, 0};
DWORD dwSize = csbi.dwSize.X * csbi.dwSize.Y;
DWORD dwWritten;
FillConsoleOutputCharacter(hStdOut, ' ', dwSize, coord, &dwWritten);
FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, dwSize, coord, &dwWritten);
gotoxy(0, 0);
SetConsoleCursorPosition(hStdOut, coord);
}

沒有留言:

張貼留言