1、清屏函數clrscr是TC特有的,其它的C語言環境沒有這個函數,也就沒有標頭檔包含這個函數。
建議使用 system("cls");來取代clrscr();比較通用,相容性好一點。
system()函數在#include <stdlib.h>裡面。
/*
printf("| The program will show : |");
printf("/r"); 斷行符號
*/
2、在VC中conio.h標頭檔中沒有gotoxy(x,y)
要自己去定義.
#include "windows.h"
void gotoxy(int x,int y)
{
COORD c;
c.X=x-1;
c.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
3、擷取游標位置函數:
BOOL GetConsoleScreenBufferInfo( HANDLE hConsoleOutput, PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo );
lpConsoleScreenBufferInfo->dwCursorPosition.X返回游標位置x座標
lpConsoleScreenBufferInfo->dwCursorPosition.Y返回游標位置y座標
設定游標函數:
BOOL SetConsoleCursorPosition( HANDLE hConsoleOutput, COORD dwCursorPosition );
dwCursorPosition.X 游標位置x座標
dwCursorPosition.Y 游標位置y座標
注意:包含檔案windows.h
樣本:
#include <windows.h>
#include <stdio.h>
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbinfo;
COORD CursorPos;
CursorPos.X=10;
CursorPos.Y=10;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&csbinfo);
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),CursorPos);
printf("123456/n");
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),csbinfo.dwCursorPosition);
return 0;
}
4、
#include <dos.h>
#include <system.h> sleep() 秒 --------linux #include "Windows.h" #include "Winbase.h" Sleep()毫秒 ------------MFC Vc6沒有delay() sleep()
a> MFC中的Sleep函數原型為:
void Sleep( DWORD dwMilliseconds);
b>linux下的sleep函數原型為:
unsigned int sleep(unsigned int seconds);
MFC中的是微秒,linux下的是秒。linux下用微秒的線程休眠函數是:
void usleep(unsigned long usec); int usleep(unsigned long usec); /* SUSv2 */
或者用select函數+timeval結構也可以(最多精確到微秒),
或者用pselect函數+timespec(可以精確到納秒,足夠精確了!)
5、在LINUX下這一切都非常簡單,無需任何函數,printf即可完成。
清除螢幕:printf("%c[2J",27);
游標跳轉到螢幕x(1~25)行、y(1~80)列:printf("%c[%d;%dH",27,x,y);
getch這樣的函數太垃圾了,在LINUX下可以控制一切輸入函數是否會顯,包括scanf、gets等,方法是: 禁止輸入時回顯:system("stty -echo"); 允許輸入時回顯:system("stty echo");
6、windows和linux裡,x,y座標互調,不一致;
printf("%c[%d;%dH",27,p,y);
printf("****"); //無/n,竟列印不出×××。
7、getch()是個不可移植的函數,可以自己類比出來一個。測試代碼如下:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
int getch(void);
int main(void)
{
char ch;
printf("Input a char:");
fflush(stdin);
ch = getch();
printf("/nYou input a %c/n", ch);
return 0;
}
int getch(void)
{
int c=0;
struct termios org_opts, new_opts;
int res=0; //----- store old settings -----------
res=tcgetattr(STDIN_FILENO, &org_opts);
assert(res==0); //---- set new terminal parms --------
memcpy(&new_opts, &org_opts, sizeof(new_opts));
new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
c=getchar(); //------ restore old settings ---------
res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
assert(res==0);
return c;
}