C语言是当中最广泛的计算机编程语言,是所有计算机编程语言的祖先,其他计算机编程语言包括当前流行的Java语言,都是用C语言实现的,C语言是编程效率最高的计算机语言,既能完成上层应用开发,也能完成底层硬件驱动编程,在计算机程序设计当中,特别是在底层硬件驱动开发当中,具有不可替代的作用。在C语言学习过程当中,除了学习好C语言基本语法外,掌握常用的C语言库函数的使用也是非常重要的,本文主要给同学们详细讲解在实际项目开发过程中常用C语言函数的用法。
1 printf 函数 函数原型:int printf(const char *format,[argument]);
功能:实现格式化输入输出
返回值:实际输出的字符个数
函数参数:format 格式化字符串
argument 要输出的参数
常用的格式化类型有:
d 有符号10进制整数
o 无符号8进制整数
u 无符号10进制整数
x 无符号的16进制数字,并以小写abcdef表示
X 无符号的16进制数字,并以大写ABCDEF表示
f 浮点数
c 单个字符
s 字符串
p 显示一个指针,near指针表示为:XXXX,far指针表示为:XXXX:YYYY
用法举例:
以10进制形式输出整形变量a的值;
int a = 100;
printf("a=%dn", a);
上面程序的执行结果为:在屏幕终端输出 a=100
2 fprintf函数 函数原型:int fprintf (FILE* stream, const char*format, [argument])
功能:将按照格式化字符串格式化后的数据输出到文件流stream中,
返回值:实际写入到文件的字符个数
函数参数:stream 要输出的文件流指针
format 格式化字符串
argument 要输出的参数
备注:fprintf和printf函数非常类似,使用方法也相同,它们不同之处在于printf函数是输出结果到标准输出终端,一般为屏幕,而fprintf是将结果输出到指定的文件流;如果将参数输出文件流stream设置为标准输出流stdout,则与printf函数等效,如下所示:
fprintf (stdout, const char*format, [argument])
用法举例:
例如:将一个格式化字符串写入到文件file1.txt中
FILE *fp = fopen("file1.txt","wb");
int count = 190;
fprintf(fp,"hello :%dn", count);
上面程序的执行结果为往file1.txt文件中写入 "hello :190" 字符串.
3 sprintf 函数 函数原型:int sprintf (char* buffer, const char*format, [argument])
功能:将按照格式化字符串格式化后的数据输出到字符串buffer中
返回值:实际输出到字符串buffer的字符个数
函数参数:buffer 要输出的字符串指针
format 格式化字符串
argument 要输出的参数
备注:sprintf和printf函数非常类似,使用方法也相同,它们不同之处在于printf函数是输出结果到标准输出终端,一般为屏幕,而sprintf是将结果输出到指定的字符串buffer;
用法举例:
将一个格式化字符串写入到目标字符串buffer中
char buffer[50] = {0};
int count = 190;
fprintf(buffer,"hello :%dn", count);
上面程序执行后,buffer中保存字符串 "hello :190"
4 scanf 函数 函数原型:int scanf(char *format [,argument,...])
功能:从标准输入设备(一般指键盘)实现格式化输入
返回值:成功返回读入的数据项个数
函数参数:format 格式化字符串
argument 输入数据项的地址列表
常用格式类型参考printf函数的个格式类型
用法举例:
从标准输入设备中输入一个整数到整形变量a中,输入一个浮点数到浮点型变量b中
int a=0;
float b=0;
scanf("%d%f",&a,&b);
上面程序执行后,从键盘输入: 19 18.6 ,程序将 19赋值给变量a, 18.6赋值给变量b .
备注: scanf 函数格式化字符串中不能加 n,如上例中这样写 scanf("%d%fn",&a,%b) 是错误的。
5 sscanf 函数 函数原型:int sscanf(const char *buffer, char *format [,argument,...])
功能:读取格式化字符串中的位置
返回值:成功返回读入的数据项个数
函数参数:buffer 要读取的格式化字符串
format 格式化字符串
argument 输入数据项的地址列表
备注: sscanf函数的使用和scanf函数非常类似,它们之间的区别在于 scanf函数是从标准输入设备输入,而sscanf 是从指定的字符串输入;
用法举例:
通常使用sscanf函数类实现数据类型转换,将字符串转换为整形或浮点型数据,举例如下:
char str[]="0x1a";
int b=0;
sscanf(str,"0x%x",&b);
上面程序的执行结果将字符串0x1a 转换成对应的16进制值保存到变量b中 .
6 getchar 函数 函数原型: int getchar(void)
功能: getchar 函数的功能是从标准输入设备读取下一个字符,包括回车换行符都能读取
返回值: 成功返回用户输入字符对应的ASCII码,失败返回 -1;
函数参数: 无
备注: getchar 函数实质是从标准输入设备缓冲区读取一个字符,用户调用 getchar 函数的时候,如果标准输入缓冲区没有数据,则等待用户从键盘输入;否则,直接从标准输入缓冲区读取一个字符,而不等待用户从键盘输入;请看下面的例子:
int a = 0;
char b = 0;
scanf("%d", &a);
b=getchar();
在上面代码中,我们首先调用 scanf 函数从键盘输入一个整数到变量a中,接着调用getchar函数从键盘输入一个字符到变量b中;但实际运行时,我们会发现输入整数变量a后,程序并没有停下来让我们输入字符变量b,这是因为我们在输入整形变量a后,输入缓冲区中保存了回车符,程序在执行getchar函数时,发现输入缓冲区中有回车符,直接读取了输入缓冲区中的回车符,而不再等待用户从键盘输入.解决办法是,在调用函数getchar输入字符之前,先清空缓冲区,
如下所示:
int a = 0;
char b = 0;
scanf("%d", &a);
while(getchar()!='n'); //清空输入缓冲区
b=getchar();
上面程序中,在调用getchar()函数从键盘读取字符之前,先执行语句while(getchar()!='n'); 清空输入缓冲区.
用法举例:
从标准输入设备输入一个字符到字符变量 s 中
char s = 0;
s = getchar();
7 fgets 函数 函数原型: char *fgets(char *buf, int bufsize, FILE *stream);
功能: 从文件流stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中。
返回值: 函数执行成功返回buf
失败或读到文件结尾返回NULL
函数参数:buf ,字符指针,用来存取所读取的数据;
bufsize, 整数,buf缓冲区的大小;
stream, FILE指针,表示将要读取的文件流;
备注:使用 fgets函数读取文件流数据的时候,每次最多读取bufsize-1个字符(第bufsize个字符赋' |