码农之路从入门到放弃之:函数

前言

  • 本人系小白,这篇文档只是为了归纳和分享学习中的函数相关的知识点,您若发现其中有出现的错误,请及时留言,万分感谢
  • 电脑端浏览器快速查找指定函数
    Ctrl+F 函数名
    例如:
    Ctrl+F printf()
  • 所描述的函数内容主要有一下几点,不断跟新,不断补充,有建议请留言,有补充请留言,欢迎大家指出其中的不足,万分感谢
函数名-
描述函数的功能描述
函数原型所在的头文件以及函数的声明
返回值函数成功或失败的返回值
参数对函数原型中的参数列表中的参数做出的解释
备注一些函数的其他信息
作用也就是使用场景
示例代码代码片
运行结果ubuntu下代码的运行结果
其他更新时间/贡献者ID

以printf为例具体格式

printf()

描述
将一个C字符串写入标准输出流(stdout),如果字符串中包含占位符(说明符以%d开头),则将参数列表中对应的参数按格式说明符进行格式化,将格式化后的参数信息插入C字符串,最后将整个字符串写入标准输出流(stdout)

函数原型

#include<stdio.h>
int printf(const char *format, ...);

返回值
成功返回写入的字节数
失败返回负数

参数

  • const char *format:这是 C 字符串,它可以包含嵌入的 format 格式说明符,format 格式说明符可被随后的附加参数中指定的值替换
  • ...:格式说明符对应的附加参数列表,根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

备注

  1. 格式说明原型:
    %[flags][width][.precision][length]specifier
    %[标志][宽度][精度.][长度]说明符

  2. 说明符specifier

说明符输出量输出结果
%d 或 i有符号十进制整数(整数不输出符号)392
%u无符号十进制整数7235
lu32位无符号整数
llu64位无符号整数
%o无符号八进制610
%x/%X无符号十六进制整数7fa/7FA
%f/%F十进制浮点,小写392.65
%e/%E科学计数法(尾数/指数)3.9265e + 2/3.9265E + 2
%g/%G以%f或%e中较短的输出宽度输出单、双精度实392.65
%a/%A十六进制浮点-0xc.90fep-2/-0XC.90FEP-2
%c单个字符a
%s字符串sample
%p指针地址b8000000
%n什么都没打印
%%向流中写入单个%%
  1. 补充标志[flags]
标识描述
+强制在前面显式正负号(+/-),默认只有负数显式负号
-"-"右对齐,默认情况下左对齐
space如果在值之前有一个空格,则会在输出值之前插入一个空格
#与o联用%#o 会在输出的八进制数前补充一个0,表示8进制数;与x/X联用%#x/%#X 会在输出的十六进制数前补充0x/0X,表示十六进制数
0指定使用0填充,默认用空格填充
  1. 宽度[width]
width描述
number指定最少要打印的字符数(宽度),如果打印的字符数小于number则会用空格填充,如果要打印的字符数大于number,则会全部输出,不会发生截断
*至少要打印的字符数(宽度)未在说明符中指定,而是作为必须格式化的参数之前的一个附加整数值参数printf("%*d",5,i);
  1. 精度[.precision]
.precision描述
.number①对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符; ②对于 e、E 和 f 说明符:要在小数点后输出的小数位数; ③对于 g 和 G 说明符:要输出的最大有效位数; ④对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符; ⑤对于 c 类型:没有任何影响; ⑥当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0
.*精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前。
  1. 长度[length]
length描述
h参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)。
l参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)。
L参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G)。

作用

  1. 在终端打印提示信息

示例代码1

#include <stdio.h> 
int main ()
{
   
 for(int i = 65 ; i<=90; i++ ) {
      printf("ASCII 值 = %d, 字符 = %c\n", i , i );
   }
 
   return 0;
}

运行结果

panda@panda:~/Desktop/code$ gcc demo.c 
panda@panda:~/Desktop/code$ ./a.out 
ASCII 值 = 65, 字符 = A
ASCII 值 = 66, 字符 = B
ASCII 值 = 67, 字符 = C
ASCII 值 = 68, 字符 = D
ASCII 值 = 69, 字符 = E
ASCII 值 = 70, 字符 = F
ASCII 值 = 71, 字符 = G
ASCII 值 = 72, 字符 = H
ASCII 值 = 73, 字符 = I
ASCII 值 = 74, 字符 = J
ASCII 值 = 75, 字符 = K
ASCII 值 = 76, 字符 = L
ASCII 值 = 77, 字符 = M
ASCII 值 = 78, 字符 = N
ASCII 值 = 79, 字符 = O
ASCII 值 = 80, 字符 = P
ASCII 值 = 81, 字符 = Q
ASCII 值 = 82, 字符 = R
ASCII 值 = 83, 字符 = S
ASCII 值 = 84, 字符 = T
ASCII 值 = 85, 字符 = U
ASCII 值 = 86, 字符 = V
ASCII 值 = 87, 字符 = W
ASCII 值 = 88, 字符 = X
ASCII 值 = 89, 字符 = Y
ASCII 值 = 90, 字符 = Z

示例代码2

#include <stdio.h>
int main()
{
   char ch = 'A';
   char str[20] = "www.runoob.com";
   float flt = 10.234;
   int no = 150;
   double dbl = 20.123456;
   printf("字符为 %c \n", ch);
   printf("字符串为 %s \n" , str);
   printf("浮点数为 %f \n", flt);
   printf("整数为 %d\n" , no);
   printf("双精度值为 %lf \n", dbl);
   printf("八进制值为 %o \n", no);
   printf("十六进制值为 %x \n", no);
   return 0;
}

运行结果

panda@panda:~/Desktop/code$ gcc demo.c
panda@panda:~/Desktop/code$ ./a.out 
字符为 A 
字符串为 www.runoob.com 
浮点数为 10.234000 
整数为 150
双精度值为 20.123456 
八进制值为 226 
十六进制值为 96 

常用占位符

  • %d 十进制有符号整数
  • %u 十进制无符号整数
  • %f 浮点数
  • %s 字符串
  • %c 单个字符
  • %p 指针的值
  • %e 指数形式的浮点数
  • %x, %X 无符号以十六进制表示的整数
  • %o 无符号以八进制表示的整数
  • %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
  • %p 输出地址符
  • %lu 32位无符号整数
  • %llu 64位无符号整数

标准C库函数

字符串处理

文件IO流操作

fopen();

描述

打开指定文件,获取文件指针

函数原型

#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);

返回值

  • 成功返回文件指针FILE*
  • 失败返回NULL,并设置errno

参数

  • const char *pathname : C 字符串,文件所在的路径,最好使用绝对路径
  • const char *mode : C 字符串,文件访问模式,访问权限
模式描述
“r”打开一个用于读取的文件。该文件必须存在。
“w”创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
“a”追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
“r+”打开一个用于更新的文件,可读取也可写入。该文件必须存在。
“w+”创建一个用于读写的空文件。
“a+”打开一个用于读取和追加的文件。

备注

  1. fopen() mode 和 open() flags 的关系
fopen()open()
rO_RDONLY
wO_WRONLY | O_CREAT | O_TRUNC
aO_WRONLY | O_CREAT | O_APPEND
r+O_RDWR
w+O_RDWR\
a+O_RDWR | O_CREAT | O_APPEND

作用

  1. 通过文件指针可以对文件进行一系列操作

示例代码


#include <stdio.h>
int main()
{
	char buf[512]={0};
	FILE * fp;
	fp = fopen ("demo.c", "r+");
	if(!fp){	//错误处理
		perror("fopen demo.c");
		return -1;
	}
	fread(buf,sizeof(buf),1,fp);	//将文件中的数据读取到内存
	printf("%s",buf);
 	fclose(fp);
	return 0;
}



运行结果


panda@panda:~/Desktop/code/demo$ make 
gcc  demo.o
panda@panda:~/Desktop/code/demo$ ./a.out 
#include <stdio.h>
int main()
{
	char buf[512]={0};
	FILE * fp;
	fp = fopen ("demo.c", "r+");
	if(!fp){	//错误处理
		perror("fopen demo.c");
		return -1;
	}
	fread(buf,sizeof(buf),1,fp);	//将文件中的数据读取到内存
	printf("%s",buf);
 	fclose(fp);
	return 0;
}


警 告 警告

  • 在打开文件时,注意对可能出现的错误结果进行判断
  • 当文件不再使用时,要调用fclose()关闭文件指针,避免造成内存泄漏:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值