C语言库函数大全及应用实例七 函数名: getw 功 能: 从流中取一整数 用 法: int getw(FILE *strem); 程序例:
#i nclude #i nclude
#define FNAME "test.$$$"
int main(void) { FILE *fp; int word;
/* place the word in a file */ fp = fopen(FNAME, "wb"); if (fp == NULL) { printf("Error opening file %s\n", FNAME); exit(1); }
word = 94; putw(word,fp); if (ferror(fp)) printf("Error writing to file\n"); else printf("Successful write\n"); fclose(fp);
/* reopen the file */ fp = fopen(FNAME, "rb"); if (fp == NULL) { printf("Error opening file %s\n", FNAME); exit(1); }
/* extract the word */ word = getw(fp); if (ferror(fp)) printf("Error reading file\n"); else printf("Successful read: word = %d\n", word);
/* clean up */ fclose(fp); unlink(FNAME);
return 0; }
函数名: getx 功 能: 返回当前图形位置的x坐标 用 法: int far getx(void); 程序例:
#i nclude #i nclude #i nclude #i nclude
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; char msg[80];
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
/* move to the screen center point */ moveto(getmaxx() / 2, getmaxy() / 2);
/* create a message string */ sprintf(msg, "<-(%d, %d) is the here.", getx(), gety());
/* display the message */ outtext(msg);
/* clean up */ getch(); closegraph(); return 0; }
函数名: gety 功 能: 返回当前图形位置的y坐标 用 法: int far gety(void); 程序例:
#i nclude #i nclude #i nclude #i nclude
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; char msg[80];
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
/* move to the screen center point */ moveto(getmaxx() / 2, getmaxy() / 2);
/* create a message string */ sprintf(msg, "<-(%d, %d) is the here.", getx(), gety());
/* display the message */ outtext(msg);
/* clean up */ getch(); closegraph(); return 0; }
函数名: gmtime 功 能: 把日期和时间转换为格林尼治标准时间(GMT) 用 法: struct tm *gmtime(long *clock); 程序例:
#i nclude #i nclude #i nclude #i nclude
/* Pacific Standard Time & Daylight Savings */ char *tzstr = "TZ=PST8PDT";
int main(void) { time_t t; struct tm *gmt, *area;
putenv(tzstr); tzset();
t = time(NULL); area = localtime(&t); printf("Local time is: %s", asctime(area)); gmt = gmtime(&t); printf("GMT is: %s", asctime(gmt)); return 0; }
函数名: gotoxy 功 能: 在文本窗口中设置光标 用 法: void gotoxy(int x, int y); 程序例:
#i nclude
int main(void) { clrscr(); gotoxy(35, 12); cprintf("Hello world"); getch(); return 0; }
函数名: gotoxy 功 能: 在文本窗口中设置光标 用 法: void gotoxy(int x, int y); 程序例:
#i nclude
int main(void) { clrscr(); gotoxy(35, 12); cprintf("Hello world"); getch(); return 0; }
函数名: graphdefaults 功 能: 将所有图形设置复位为它们的缺省值 用 法: void far graphdefaults(void); 程序例:
#i nclude #i nclude #i nclude #i nclude
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int maxx, maxy;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "c:\\bor\\Borland\\bgi");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
maxx = getmaxx(); maxy = getmaxy();
/* output line with non-default settings */ setlinestyle(DOTTED_LINE, 0, 3); line(0, 0, maxx, maxy); outtextxy(maxx/2, maxy/3, "Before default values are restored."); getch();
/* restore default values for everything */ graphdefaults();
/* clear the screen */ cleardevice();
/* output line with default settings */ line(0, 0, maxx, maxy); outtextxy(maxx/2, maxy/3, "After restoring default values.");
/* clean up */ getch(); closegraph(); return 0; }
函数名: grapherrormsg 功 能: 返回一个错误信息串的指针 用 法: char *far grapherrormsg(int errorcode); 程序例:
#i nclude #i nclude #i nclude #i nclude
#define NONSENSE -50
int main(void) { /* FORCE AN ERROR TO OCCUR */ int gdriver = NONSENSE, gmode, errorcode;
/* initialize graphics mode */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult();
/* if an error occurred, then output a */ /* descriptive error message. */ if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
/* draw a line */ line(0, 0, getmaxx(), getmaxy());
/* clean up */ getch(); closegraph(); return 0; }
函数名: graphresult 功 能: 返回最后一次不成功的图形操作的错误代码 用 法: int far graphresult(void); 程序例:
#i nclude #i nclude #i nclude #i nclude
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode;
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
/* draw a line */ line(0, 0, getmaxx(), getmaxy());
/* clean up */ getch(); closegraph(); return 0; }
函数名: _graphfreemem 功 能: 用户可修改的图形存储区释放函数 用 法: void far _graphfreemem(void far *ptr, unsigned size); 程序例:
#i nclude #i nclude #i nclude #i nclude #i nclude
int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int midx, midy;
/* clear the text screen */ clrscr(); printf("Press any key to initialize graphics mode:"); getch(); clrscr();
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
midx = getmaxx() / 2; midy = getmaxy() / 2;
/* display a message */ settextjustify(CENTER_TEXT, CENTER_TEXT); outtextxy(midx, midy, "Press any key to exit graphics mode:");
/* clean up */ getch(); closegraph(); return 0; }
/* called by the graphics kernel to allocate memory */ void far * far _graphgetmem(unsigned size) { printf("_graphgetmem called to allocate %d bytes.\n", size); printf("hit any key:"); getch(); printf("\n");
/* allocate memory from far heap */ return farmalloc(size); }
/* called by the graphics kernel to free memory */ void far _graphfreemem(void far *ptr, unsigned size) { printf("_graphfreemem called to free %d bytes.\n", size); printf("hit any key:"); getch(); printf("\n");
/* free ptr from far heap */ farfree(ptr); }
函数名: _graphgetmem 功 能: 用户可修改的图形存储区分配函数 用 法: void far *far _graphgetmem(unsigned size); 程序例:
#i nclude #i nclude #i nclude #i nclude #i nclude
int main(void) { /* request autodetection */ int gdriver = DETECT, gmode, errorcode; int midx, midy;
/* clear the text screen */ clrscr(); printf("Press any key to initialize graphics mode:"); getch(); clrscr();
/* initialize graphics and local variables */ initgraph(&gdriver, &gmode, "");
/* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ }
midx = getmaxx() / 2; midy = getmaxy() / 2;
/* display a message */ settextjustify(CENTER_TEXT, CENTER_TEXT); outtextxy(midx, midy, "Press any key to exit graphics mode:");
/* clean up */ getch(); closegraph(); return 0; }
/* called by the graphics kernel to allocate memory */ void far * far _graphgetmem(unsigned size) { printf("_graphgetmem called to allocate %d bytes.\n", size); printf("hit any key:"); getch(); printf("\n");
/* allocate memory from far heap */ return farmalloc(size); }
/* called by the graphics kernel to free memory */ void far _graphfreemem(void far *ptr, unsigned size) { printf("_graphfreemem called to free %d bytes.\n", size); printf("hit any key:"); getch(); printf("\n");
/* free ptr from far heap */ farfree(ptr); }
函数名: harderr 功 能: 建立一个硬件错误处理程序 用 法: void harderr(int (*fptr)()); 程序例: /*This program will trap disk errors and prompt the user for action. Try running it with no disk in drive A: to invoke its functions.*/
#i nclude #i nclude #i nclude #define IGNORE 0 #define RETRY 1 #define ABORT 2 int buf[500]; /*define the error messages for trapping disk problems*/ static char *err_msg[] = { "write protect", "unknown unit", "drive not ready", "unknown command", "data error (CRC)", "bad request", "seek error", "unknown media type", "sector not found", "printer out of paper", "write fault", "read fault", "general failure", "reserved", "reserved", "invalid disk change" };
error_win(char *msg) { int retval;
cputs(msg);
/*prompt for user to press a key to abort, retry, ignore*/ while(1) { retval= getch(); if (retval == 'a' || retval == 'A') { retval = ABORT; break; } if (retval == 'r' || retval == 'R') { retval = RETRY; break; } if (retval == 'i' || retval == 'I') { retval = IGNORE; break; } }
return(retval); }
/*pragma warn -par reduces warnings which occur due to the non use of the parameters errval, bp and si to the handler.*/ #pragma warn -par
int handler(int errval,int ax,int bp,int si) { static char msg[80]; unsigned di; int drive; int errorno; di= _DI; /*if this is not a disk error then it was another device having trouble*/
if (ax < 0) { /* report the error */ error_win("Device error"); /* and return to the program directly requesting abort */ hardretn(ABORT); } /* otherwise it was a disk error */ drive = ax & 0x00FF; errorno = di & 0x00FF; /* report which error it was */ sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ", err_msg[errorno], 'A' + drive); /* return to the program via dos interrupt 0x23 with abort, retry, or ignore as input by the user. */ hardresume(error_win(msg)); return ABORT; } #pragma warn +par
int main(void) { /* install our handler on the hardware problem interrupt */ harderr(handler); clrscr(); printf("Make sure there is no disk in drive A:\n"); printf("Press any key ....\n"); getch(); printf("Trying to access drive A:\n"); printf("fopen returned %p\n",fopen("A:temp.dat", "w")); return 0; }
函数名: hardresume 功 能: 硬件错误处理函数 用 法: void hardresume(int rescode); 程序例:
/* This program will trap disk errors and prompt the user for action. */ /* Try running it with no disk in drive A: to invoke its functions */
#i nclude #i nclude #i nclude
#define IGNORE 0 #define RETRY 1 #define ABORT 2
int buf[500];
/* define the error messages for trapping disk problems */ static char *err_msg[] = { "write protect", "unknown unit", "drive not ready", "unknown command", "data error (CRC)", "bad request", "seek error", "unknown media type", "sector not found", "printer out of paper", "write fault", "read fault", "general failure", "reserved", "reserved", "invalid disk change" };
error_win(char *msg) { int retval;
cputs(msg);
/* prompt for user to press a key to abort, retry, ignore */ while(1) { retval= getch(); if (retval == 'a' || retval == 'A') { retval = ABORT; break; } if (retval == 'r' || retval == 'R') { retval = RETRY; break; } if (retval == 'i' || retval == 'I') { retval = IGNORE; break; } }
return(retval); }
/* pragma warn -par reduces warnings which occur due to the non use */ /* of the parameters errval, bp and si to the handler. */ #pragma warn -par
int handler(int errval,int ax,int bp,int si) { static char msg[80]; unsigned di; int drive; int errorno;
di= _DI; /* if this is not a disk error then it was another device having trouble */
if (ax < 0) { /* report the error */ error_win("Device error"); /* and return to the program directly requesting abort */ hardretn(ABORT); } /* otherwise it was a disk error */ drive = ax & 0x00FF; errorno = di & 0x00FF; /* report which error it was */ sprintf(msg, "Error: %s on drive %c\r\nA)bort, R)etry, I)gnore: ", err_msg[errorno], 'A' + drive); /* return to the program via dos interrupt 0x23 with abort, retry */ /* or ignore as input by the user. */ hardresume(error_win(msg)); return ABORT; } #pragma warn +par
int main(void) { /* install our handler on the hardware problem interrupt */ harderr(handler); clrscr(); printf("Make sure there is no disk in drive A:\n"); printf("Press any key ....\n"); getch(); printf("Trying to access drive A:\n"); printf("fopen returned %p\n",fopen("A:temp.dat", "w")); return 0; }
|