> 文章列表 > C语言函数大全-- i 开头的函数

C语言函数大全-- i 开头的函数

C语言函数大全-- i 开头的函数

C语言函数大全

本篇介绍C语言函数大全– i 开头的函数

1. imagesize

1.1 函数说明

函数声明 函数功能
unsigned imagesize(int left, int top, int right, int bottom); 获取保存位图像所需的字节数

1.2 演示示例

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>#define ARROW_SIZE 10void draw_arrow(int x, int y);int main()
{int gdriver = DETECT, gmode, errorcode;void *arrow;int x, y, maxx;unsigned int size;initgraph(&gdriver, &gmode, "");errorcode = graphresult();if (errorcode != grOk){printf("Graphics error: %s\\n", grapherrormsg(errorcode));printf("Press any key to halt:");getch();exit(1);}maxx = getmaxx();x = 0;y = getmaxy() / 2;draw_arrow(x, y);size = imagesize(x, y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE);// 分配内存以保存图像arrow = malloc(size);// 抓取图像getimage(x, y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE, arrow);// 重复,直到按键被按下while (!kbhit()){// 擦除旧图像putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);x += ARROW_SIZE;if (x >= maxx)x = 0;// 绘制新图像putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);}free(arrow);closegraph();return 0;
}void draw_arrow(int x, int y)
{// 在屏幕上画一个箭头moveto(x, y);linerel(4*ARROW_SIZE, 0);linerel(-2*ARROW_SIZE, -1*ARROW_SIZE);linerel(0, 2*ARROW_SIZE);linerel(2*ARROW_SIZE, -1*ARROW_SIZE);
}

1.3 运行结果

C语言函数大全-- i 开头的函数

2. initgraph

2.1 函数说明

函数声明 函数功能
void initgraph( int *graphdriver, int *graphmode, char *pathtodriver ); 初始化图形系统

2.2 演示示例

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>int main()
{int gdriver = DETECT, gmode, errorcode;// 初始化图形系统initgraph(&gdriver, &gmode, "");errorcode = graphresult();if (errorcode != grOk){printf("Graphics error: %s\\n", grapherrormsg(errorcode));printf("Press any key to halt:");getch();exit(1);}line(0, 0, getmaxx(), getmaxy());getch();closegraph();return 0;
}

2.3 运行结果

C语言函数大全-- i 开头的函数

3. inport

3.1 函数说明

函数声明 函数功能
int inport(int protid); 从硬件端口中输入

3.2 演示示例

#include <stdio.h>
#include <dos.h>int main()
{int result;int port = 0;  // 串行端口 0// 从硬件端口中输入result = inport(port);printf("Word read from port %d = 0x%X\\n", port, result);return 0;
}

4. insline

4.1 函数说明

函数声明 函数功能
void insline(void); 在文本窗口中插入一个空行

4.2 演示示例

#include <conio.h>int main()
{clrscr();cprintf("INSLINE inserts an empty line in the text window\\r\\n");cprintf("at the cursor position using the current text\\r\\n");cprintf("background color.  All lines below the empty one\\r\\n");cprintf("move down one line and the bottom line scrolls\\r\\n");cprintf("off the bottom of the window.\\r\\n");cprintf("\\r\\nPress any key to continue:");gotoxy(1, 3);getch();// 在文本窗口中插入一个空行insline();getch();return 0;
}

5. installuserdriver

5.1 函数说明

函数声明 函数功能
int installuserdriver(char *name, int (*detect)(void)); 安装设备驱动程序到BGI设备驱动程序表中

注意: 该函数在 WinBGI 中不可用

5.2 演示示例

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>int huge detectEGA(void);
void checkerrors(void);int main(void)
{int gdriver, gmode;// 安装用户编写的设备驱动程序gdriver = installuserdriver("EGA", detectEGA);// 必须强制使用检测程序gdriver = DETECT;// 检查是否有任何安装错误checkerrors();// 初始化图形程序initgraph(&gdriver, &gmode, "");// 检查是否有任何初始化错误checkerrors();// 画一条对象线line(0, 0, getmaxx(), getmaxy());getch();closegraph();return 0;
}/*检测EGA或VGA卡*/
int huge detectEGA(void);
{int driver, mode, sugmode = 0;detectgraph(&driver, &mode);if ((driver == EGA) || (driver == VGA))return sugmode; // 返回建议的视频模式编号elsereturn grError; // 返回错误代码
}/*检查并报告任何图形错误*/
void checkerrors(void)
{// 获取上次图形操作的读取结果int errorcode = graphresult();if (errorcode != grOk){printf("Graphics error: %s\\n", grapherrormsg(errorcode));printf("Press any key to halt:");getch();exit(1);}
}

6. installuserfont

6.1 函数说明

函数声明 函数功能
int installuserfont( char *name ); 安装未嵌入BGI系统的字体文件(CHR)

注意: 该函数在 WinBGI 中不可用

6.2 演示示例

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>void checkerrors(void);int main()
{int gdriver = DETECT, gmode;int userfont;int midx, midy;initgraph(&gdriver, &gmode, "");midx = getmaxx() / 2;midy = getmaxy() / 2;checkerrors();// 安装用户定义的字体文件userfont = installuserfont("USER.CHR");checkerrors();// 选择用户字体settextstyle(userfont, HORIZ_DIR, 4);outtextxy(midx, midy, "Testing!");getch();closegraph();return 0;
}/*检查并报告任何图形错误*/
void checkerrors(void)
{// 获取上次图形操作的读取结果int errorcode = graphresult();if (errorcode != grOk){printf("Graphics error: %s\\n", grapherrormsg(errorcode));printf("Press any key to halt:");getch();exit(1);}
}

7. int86

7.1 函数说明

函数声明 函数功能
int int86(int intr_num, union REGS *inregs, union REGS *outregs); 通用8086软中断接口

7.2 演示示例

#include <stdio.h>
#include <conio.h>
#include <dos.h>#define VIDEO 0x10void movetoxy(int x, int y)
{union REGS regs;regs.h.ah = 2;  /* set cursor postion */regs.h.dh = y;regs.h.dl = x;regs.h.bh = 0;  /* video page 0 */int86(VIDEO, &regs, &regs);
}int main(void)
{clrscr();movetoxy(35, 10);printf("Hello\\n");return 0;
}

8. int86x

8.1 函数说明

函数声明 函数功能
int int86x(int intr_num, union REGS *insegs, union REGS *outregs, struct SREGS *segregs); 通用8086软中断接口

8.2 演示示例

#include <dos.h>
#include <process.h>
#include <stdio.h>int main(void)
{char filename[80];union REGS inregs, outregs;struct SREGS segregs;printf("Enter filename: ");gets(filename);inregs.h.ah = 0x43;inregs.h.al = 0x21;inregs.x.dx = FP_OFF(filename);segregs.ds = FP_SEG(filename);int86x(0x21, &inregs, &outregs, &segregs);printf("File attribute: %X\\n", outregs.x.cx);return 0;
}

9. intdos

9.1 函数说明

函数声明 函数功能
int intdos(union REGS *inregs, union REGS *outregs); 通用DOS接口

9.2 演示示例

#include <stdio.h>
#include <dos.h>/* 删除文件,成功返回0,失败返回非0。*/
int delete_file(char near *filename)
{union REGS regs;int ret;regs.h.ah = 0x41; regs.x.dx = (unsigned) filename;ret = intdos(&regs, &regs);// 如果设置了进位标志,则出现错误return(regs.x.cflag ? ret : 0);
}int main(void)
{int err;err = delete_file("NOTEXIST.$$$");if (!err)printf("Able to delete NOTEXIST.$$$\\n");elseprintf("Not Able to delete NOTEXIST.$$$\\n");return 0;
}

10. intdosx

10.1 函数说明

函数声明 函数功能
int intdosx(union REGS *inregs, union REGS *outregs, struct SREGS *segregs); 通用DOS中断接口

10.2 演示示例

#include <stdio.h>
#include <dos.h>/* 删除文件,成功返回0,失败返回非0。*/
int delete_file(char far *filename)
{union REGS regs; struct SREGS sregs;int ret;regs.h.ah = 0x41;regs.x.dx = FP_OFF(filename);sregs.ds = FP_SEG(filename);ret = intdosx(&regs, &regs, &sregs);// 如果设置了进位标志,则出现错误return(regs.x.cflag ? ret : 0);
}int main(void)
{int err;err = delete_file("NOTEXIST.$$$");if (!err)printf("Able to delete NOTEXIST.$$$\\n");elseprintf("Not Able to delete NOTEXIST.$$$\\n");return 0;
}

11. intr

11.1 函数说明

函数声明 函数功能
void intr(int intr_num, struct REGPACK *preg); 改变软中断接口

11.2 演示示例

#include <stdio.h>
#include <string.h>
#include <dir.h>
#include <dos.h>#define CF 1  // 进位标志int main(void)
{char directory[80];struct REGPACK reg;printf("Enter directory to change to: ");gets(directory);reg.r_ax = 0x3B << 8;  // 将3Bh转换为AHreg.r_dx = FP_OFF(directory);reg.r_ds = FP_SEG(directory);intr(0x21, &reg);if (reg.r_flags & CF)printf("Directory change failed\\n");getcwd(directory, 80);printf("The current directory is: %s\\n", directory);return 0;
}

12. ioctl

12.1 函数说明

函数声明 函数功能
int ioctl(int fd, int cmd, ...) ; 控制 I/O 设备
参数 描述
fd 文件描述符
cmd 交互协议,设备驱动将根据 cmd 执行对应操作
可变参数arg,依赖 cmd 指定长度以及类型

12.2 演示示例

#include <stdio.h>
#include <dir.h>
#include <io.h>int main(void)
{int stat = ioctl(0, 8, 0, 0);if (!stat)printf("Drive %c is removable.\\n", getdisk() + 'A');elseprintf("Drive %c is not removable.\\n", getdisk() + 'A');return 0;
}

13. isatty

13.1 函数说明

函数声明 函数功能
int isatty(int handle); 检查设备类型

13.2 演示示例

#include <stdio.h>
#include <io.h>int main(void)
{int handle;handle = fileno(stdprn);if (isatty(handle))printf("Handle %d is a device type\\n", handle);elseprintf("Handle %d isn't a device type\\n", handle);return 0;
}

13.3 运行结果

C语言函数大全-- i 开头的函数

14. ilogb,ilogbf,ilogbfl

14.1 函数说明

函数声明 函数功能
int ilogb (double x); 获取 x 的对数的积分部分(double)
int ilogbf (float x); 获取 x 的对数的积分部分(float)
int ilogbl (long double x); 获取 x 的对数的积分部分(long double)

如果计算成功,则返回 x 的对数的整数部分。如果 x0,则此函数返回FP_ILOGB0 并报告错误。如果 x 是NaN值,则此函数返回 FP_ILOGBNAN 并报告错误。如果 x 是正无穷大或负无穷大,此函数将返回 INT_MAX 并报告错误。

14.2 演示示例

#include <stdio.h>
#include <math.h>int main()
{int result;double x = 15.0;result = ilogb(x);printf("The integral part of the logarithm of double value %lf is %d\\n", x, result);float xf = 15.0f;result = ilogbf(xf);printf("The integral part of the logarithm of float value %f is %d\\n", xf, result);long double xL = 15.0L;result = ilogbl(xL);printf("The integral part of the logarithm of long double value %Lf is %d\\n", xL, result);return 0;
}

14.3 运行结果

C语言函数大全-- i 开头的函数

15. itoa

15.1 函数说明

函数声明 函数功能
char * itoa(int value, char *string, int radix); 把一整数转换为字符串
参数 描述
value 被转换的整数
string 转换后储存的字符数组
radix 转换进制数,如2,8,10,16 进制等,大小应在2-36之间。

15.2 演示示例

#include <stdlib.h>
#include <stdio.h>int main(void)
{int number = 12345;char string[25];itoa(number, string, 2);printf("integer = %d string = %s\\n", number, string);itoa(number, string, 8);printf("integer = %d string = %s\\n", number, string);itoa(number, string, 10);printf("integer = %d string = %s\\n", number, string);itoa(number, string, 16);printf("integer = %d string = %s\\n", number, string);return 0;
}

15.3 运行结果

C语言函数大全-- i 开头的函数

参考

  1. [API Reference Document]
  2. [ioctl]