头文件讲解

news/2024/11/15 23:49:11/文章来源:https://www.cnblogs.com/mycrictfchuyin/p/18548900

stdio.h头文件(常用输入输出函数)

printf()函数:

把输出发送到一个叫作缓冲区(buffer)的中间存储区域。

  • 当缓冲区满、遇到换行字符或需要输入的时候迫使printf()的输出被发送到屏幕上。
  • 可以使用fflush()函数刷新缓冲区
  • printf()返回值是待显示字符的个数
  • printf()中如果你不想预先指定字段宽度,希望通过程序来指定,那么可以用*修饰符代替字段宽度。但还是要用一个参数告诉函数,字段宽度应该是多少。也就是说,如果转换说明是%*d,那么参数列表中应包含*和 d对应的值。这个技巧也可用于浮点值指定精度和字段宽度。(%*.*f

scanf()函数:

scanf()函数每次读取都会跳过所有的空白字符,直至遇到第1个非空白字符才开始读取。

  • 读取整数(%d):scanf()希望发现一个数字字符或者一个符号(+或-)。如果遇到一个非数字字符,它便认为读到了整数的末尾。scanf()把非数字字符放回输入。意味着程序在下一次读取输入时,首先读到的是上一次读取丢弃的非数字字符。
  • 读取字符(%c):读取单个字符
  • 读取字符串(%s):scanf()会读取除空白以外的所有字符。意味着只能读取一个单词。
    • 无法利用字段宽度让只有一个%s的scanf()读取多个单词。如果使用字段宽度,scanf()在字段末尾或第1个空白字符处停止读取。
  • 格式字符串中的普通字符:scanf()允许把普通字符放在格式字符串中。但除空格字符外的普通字符必须与输入字符串严格匹配。
    • 假设在两个转换说明中加一个逗号:scanf("%d,%d", &n, &m);``scanf()函数将其解释成:用户将输入一个数字、一个逗号,然后再输入一个数字。也就是说,用户必须像下面这样进行输入两个整数:
      • 由于格式字符串中,%d后面紧跟逗号,所以必须在输入第一个数后再输入一个逗号。
  • 对于scanf(),一定要记得在变量名前加上地址运算符。
  • scanf()返回值=scanf()成功读取的项数。如果没有读取任何项,或者需要读取一个数字而用户却输入一个非数值字符串,即类型不匹配scanf()便返回0。
  • scanf()检测到“文件结尾”时,会返回EOF(EOF是stdio.h中定义的特殊值,通常用#define指令把EOF定义为-1)。
  • scanf()中如果把*放在%和转换字符之间时,会使得scanf()跳过相应的输出项。
    • 示例:scanf("%*d %*d %d", &n);其中的scanf()指示:跳过两个整数,把第3个整数拷贝给n。
    • 在程序需要读取文件中特定列的内容时,这项跳过功能很有用。
  • scanf()函数检测到文件结尾时返回EOF。

getchar()函数:

读取下一个输入字符

  • 使用int数组时getchar只能赋值数字,无法赋值其他字符容易出错。
  • getchar()和 putchar()不需要转换说明,因为它们只处理字符。
  • 在C语言中,用getchar()读取文件检测到文件结尾时将返回EOF
  • getchar()的返回值和EOF作比较。如果两值不同,就说明没有到达文件结尾。
    • 检测文件结尾:while ((ch = getchar()) != EOF)
  • 不能把getchar()scanf()这两个函数混用
    • getchar()读取每个字符,包括空格、制表符和换行符;
    • scanf()在读取数字时则会跳过空格、制表符和换行符
    • 以 int 类型读取字符(这样做可以检测 EOF)

putchar()函数:

打印一个字符

gets()函数:

读取整行输入,直至遇到换行符,然后丢弃换行符,储存其余字符,并在这些字符的末尾添加一个空字符使其成为一个 C字符串。

  • 经典用法:gets(words);
    • words是一个char型数组。如果输入的字符串过长,会导致缓冲区溢出,可能出现问题。
  • 过去通常用fgets()来代替gets(),其在处理输入方面与gets()略有不同。
  • C11标准新增的gets_s()函数也可代替gets()。该函数与gets()函数更接近,而且可以替换现有代码中的gets()。但它是stdio.h输入/输出函数系列中的可选扩展。

puts()函数:

只用于显示字符串,而且自动在显示的字符串末尾加上换行符

  • 该函数在遇到空字符时就停止输出,所以必须确保有空字符。

fgets(,,)函数:

  • 第1个参数是数组,
  • 第2个参数指明了读入字符的最大数量。通过限制读入的字符数来解决溢出的问题。该函数专门设计用于处理文件输入。
    • 如果该参数的值是n,那么fgets()将读入n-1个字符,或者读到遇到的第一个换行符为止。
    • 如果fgets()读到一个换行符,会把它储存在字符串中。
  • fgets()函数的第3 个参数指明要读入的文件。
    • 如果读入从键盘输入的数据,则以stdin(标准输入)作为参数
      • 该标识符定义在stdio.h中。
  • fgets()函数把换行符放在字符串的末尾,通常要与 fputs()函数配对使用,除非该函数不在字符串末尾添加换行符。
  • 使用循环语句fgets()读不到换行会一直读,直到读完一整行,这样可以某种程度上无视数组大小的限制。
    • 示例:while (fgets(words, STLEN, stdin) != NULL && words[0] != '\n')

fputs(,)函数:

是puts()针对文件定制的版本。

  • 第2个参数指明要写入数据的文件。如果要打印在显示器上,stdout(标准输出)作为该参数
  • 不在字符串末尾添加换行符
    • 注意,gets()丢弃输入中的换行符,但是puts()在输出中添加换行符。
    • 另一方面,fgets()保留输入中的换行符,fputs()不在输出中添加换行符。
    • 使用示例:fputs(words, stdout);

gets_s()函数:

fgets()类似,都用一个参数限制读入的字符数。

  • gets_s()只从标准输入中读取数据,所以不需要第3个参数。
  • 如果gets_s()读到换行符,会丢弃它而不是储存它。
  • 如果gets_s()读到最大字符数都没有读到换行符,首先会把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至读到换行符或文件结尾,然后返回空指针。
    • 而fgets()会将它们保留在输入行。只要输入行未超过最大字符数,gets_s()和gets()几乎一样,完全可以用gets_s()替换gets()。

string.h头文件(字符串函数)

C库提供了多个处理字符串的函数,ANSI C把这些函数的原型放在string.h头文件中。要注意的是sprintf()函数,其原型在stdio.h头文件中。

strlen()函数

  • 用于统计字符串的长度

strcat()函数

  • 用于拼接字符串。
  • 接受两个字符串作为参数
    • 把第2个字符串的备份附加在第1个字符串末尾
    • 把拼接后形成的新字符串作为第1个字符串
    • 第2个字符串不变。
    • 删除第一个字符串原来末尾的“\0”
  • 该函数返回第1个参数,即拼接第2个字符串后的第1个字符串的地址。
  • 注意,该函数无法检查第1个数组是否能容纳第2个字符串

strncat()函数

  • 该函数的第3 个参数指定了最大添加字符数

strcmp()函数

  • 用于字符串比较。
  • 该函数通过比较运算符来比较字符串。如果两个字符串参数相同,该函数就返回0,否则返回非零值。
  • 可以用strcmp()比较储存在不同大小数组中的字符串。
  • 如果在字母表中第1个字符串位于第2个字符串前面,就返回负数;反之则返回正数
  • strcmp()比较所有的字符,按机器排序序列进行比较

strncmp()函数

  • 可以比较到字符不同的地方,也可以只比较第3个参数指定的字符数。

stricmp()函数

  • 比较两个字符串忽略大小写后的大小
  • 返回值和上述相同

strcpy()函数

  • 用于拷贝整个字符串。
  • 相当于字符串赋值运算符。
  • 第1个参数不必指向数组的开始。
  • 第2个参数指向的字符串被拷贝至第1个参数指向的数组中。
    • 拷贝出来的字符串被称为目标字符串,最初的字符串被称为源字符串。
  • 该函数返回类型是 char*,返回的是第 1个参数的值,即一个字符的地址。

strncpy()函数

  • 该函数的第 3 个参数指明可拷贝的最大字符数。
  • 如果拷贝到第n个字符时还未拷贝完整个源字符串,就不会拷贝空字符,此时需要有处理程序。
    • 示例:
strncpy(qwords[i], temp, TARGSIZE - 1);
qwords[i][TARGSIZE - 1] = '\0';//确保储存的是一个字符串。

sprintf()函数

  • 把数据写入字符串,而不是打印在显示器上。
  • sprintf(,”%”,)
  • 第1个参数是目标字符串的地址。其余参数和printf()相同。

strpbrk()函数

  • 参数都为字符串
  • 如果第一个参数中包含第二个参数中的任意字符,返回指向 s1 字符串首位置的指针;反之则返回空字符

strchr()函数

  • 第一个参数为字符串,第二个参数为字符
  • 如果字符串中包含该字符,返回该字符的指针(末尾的空字符也是字符串的一部分,所以在查找范围内);反之则返回空指针。

strrchr()函数

  • 第一个参数为字符串,第二个参数为字符
  • 该函数返回字符串中某字符的最后一次出现的位置(末尾的空字符也是字符串的一部分,所以在查找范围内)。如果未找到c字符,则返回空指针。

strset()函数

  • 第一个参数为字符串,第二个参数为字符,第三个参数为数字
  • 将字符串签名n个字符都设为指定字符

strstr()函数

  • 参数都为字符串
  • 该函数返回指向第一个参数中第二个参数出现的首位置。如果在第一个参数中没有找到第二个参数,则返回空指针。

size_t类型

  • 是sizeof运算符返回的类型
  • 声明示例:size_t strlen(const char * s);
    • 该函数返回s字符串中的字符数,不包括末尾的空字符。

atoi/l/f()函数

  • 用于把字母数字转换成整数
  • 该函数接受一个字符串作为参数,返回相应的整数值。
  • atoi()、atol()和atof()函数把字符串形式的数字分别转换成int、long和double类型的数字。

strtol()、strtoul()和strtod()函数把字符串形式的数字分别转换成long、unsigned long和double类型的数字。

格式转换是按照AXCII表来的,’0’转换完是48,一定要注意不是0。

使用技巧:

查找字符串并分析时

  • 使用 strcmp()来代替关系运算符

当比较字符串时

  • 使用strcpy()或strncpy()代替赋值运算符把字符串赋给字符数组。

Ctype.h头文件

字符测试函数名称 如果是下列参数,返回值为真
isalnum() 字母或数字
isdigit() 数字
isxdigit() 十六进制字符
isalpha() 字母
islower() 小写字母
isupper() 大写字母
iscntrl() 控制字符,如Ctrl+B
isprint() 可打印字符
isblank() 标准的空白字符(空格、水平制表符或换行符)或任何其他本地化指定为空白的字符
isspace() 空白字符(空格、换行符、回车符、换页符、垂直制表符、水平制表符或其他本地化定义的字符)
isgraph() 除空格以外的任何可打印字符
ispunct() 标点符号(除空格或字母数字以外的任何可打印字符)
字符映射函数名称 行为
tolower() 如果参数是大写字符,该函数返回小写字符,否则返回原始参数
toupper() 如果参数是小写字符,该函数返回小大写字符,否则返回原始参数

stdlib.h头文件

内存分配函数 效果
malloc(size_t size) 分配一块内存区域
calloc(size_t num, size_t size) 分配一块内存区域,并初始化为0
realloc(void *ptr, size_t new_size) 改变先前分配的内存区域的大小
free(void *ptr) 释放先前分配的内存区域
程序控制函数 效果
exit(int status) 终止当前程序的执行
abort(void) 生成一个异常信号,导致程序异常终止
system(const char *command) 执行一个命令
转换函数 效果
atoi(const char *str) 将字符串转换为整数
atol(const char *str) 将字符串转换为长整数
atof(const char *str) 将字符串转换为浮点数
strtol(const char *str, char **endptr, int base) 将字符串转换为长整数
strtod(const char *str, char **endptr) 将字符串转换为双精度浮点数
随机数生成函数 效果
rand(void) 生成一个伪随机数
srand(unsigned int seed) 设置随机数生成器的种子
搜索和排序函数 效果
qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *)) 对数组进行排序
bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *)) 在已排序的数组中二分查找
其他实用工具函数 效果
abs(int j) 返回整数的绝对值
labs(long int j) 返回长整数的绝对值
div(int numerator, int denominator) 执行除法运算并返回商和余数
ldiv(long int numerator, long int denominator) 执行长整数除法运算并返回商和余数
mbstowcs(wchar_t *restrict pwcs, const char *restrict s, size_t n) 将多字节字符串转换为宽字符字符串
wcstombs(char *restrict s, const wchar_t *restrict pwcs, size_t n) 将宽字符字符串转换为多字节字符串

math.h头文件

常数 含义
M_PI 圆周率 π 的值
M_E 自然对数的底数 e 的值
M_LOG2E log2(e) 的值
M_LOG10E log10(e) 的值
M_LN2 自然对数 ln(2) 的值
M_LN10 自然对数 ln(10) 的值
M_PI_2 π/2 的值
M_PI_4 π/4 的值
M_1_PI 1/π 的值
M_2_PI 2/π 的值
M_2_SQRTPI 2/√π 的值
M_SQRT2 √2 的值
M_SQRT1_2 1/√2 的值
幂函数 效果
pow(x, y) 计算 x 的 y 次幂,返回double型
sqrt(x) 计算 x 的平方根
cbrt(x) 计算 x 的立方根
三角函数 效果
sin(x) 计算 x(以弧度为单位)的正弦值
cos(x) 计算 x(以弧度为单位)的余弦值
tan(x) 计算 x(以弧度为单位)的正切值
asin(x) 计算 x 的反正弦值
acos(x) 计算 x 的反余弦值
atan(x) 计算 x 的反正切值
atan2(y, x) 计算 y/x 的反正切值
指数和对数函数 效果
exp(x) 计算 e 的 x 次幂
log(x) 计算 x 的自然对数
log10(x) 计算 x 的以10为底的对数
log2(x) 计算 x 的以2为底的对数
超越函数 效果
sinh(x) 计算 x 的双曲正弦值
cosh(x) 计算 x 的双曲余弦值
tanh(x) 计算 x 的双曲正切值
其他函数 效果
fabs(x) 计算 x 的绝对值
ceil(x) 计算大于或等于 x 的最小整数
floor(x) 计算小于或等于 x 的最大整数
fmod(x, y) 计算 x 除以 y 的余数
round(x) 将 x 四舍五入到最近的整数
trunc(x) 将 x 截断为整数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队作业4——项目冲刺5

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/作业要求 需求&原型改进、系统设计、Alpha任务分配计划、测试计划团队项目仓库 https://github.com/bitpurleclude/GDUT-Goofish/issues团队成员 李嘉锐 车峤锐 于海洋 林进光 黄健 钟启腾 钟月灿1…

基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现二

运行环境:jdk1.8、mysql5.x、idea、maven3.5/3.5 如果环境一致 运行不起来可以右侧联系我,包运行。 功能:管理员信息数据层Mapper、宠物信息数据层Mapper、宠物领养记录信息数据层Mapper、宠物评论信息数据层Mapper、宠物评论回复信息数据层Mapper、用户信息数据层Mapper 技…

Alpha冲刺(3/14)——2024.11.14

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 编…

「AI Infra 软件开源不是一个选项,而是必然」丨云边端架构和 AI Infra专场回顾@RTE2024

在人工智能和开源技术蓬勃发展的当下,AI Infra 项目正经历着日新月异的变革。从跨平台运行时到云边端 AI 基础设施,再到多模态知识助手,创新浪潮席卷而来。这些进步不仅显著提升了技术指标,也为实时音视频处理、边缘计算、大模型应用等场景开辟了新的可能性。在 RTE 2024 大…

2024-2025-1 20241305 《计算机基础与程序设计》第八周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第八周作业这个作业的目标 1、功能设计与面向对象设计 2、面向对象设计过程 3、面向对象语言三要素 4、汇编、编译、解释、执行作业正文 本博客链接教材学习…

基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现一

功能点:管理员信息实体类Entity、宠物信息实体类Entity、宠物领养记录信息实体类Entity、宠物评论信息实体类Entity、宠物评论回复信息实体类Entity、用户信息实体类Entity 技术点:SSM+JSP+Mysql+Bootstrap+JS+CSS 免费学习:猿来入此一、前言介绍: 免费学习:猿来入此 1.1 …

2024-2025-1 20241320 《计算机基础与程序设计》第8周学习总结

2024-2025-1 20241320 《计算机基础与程序设计》第8周学习总结 作业信息 |这个作业属于哪个课程| https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP |这个作业要求在哪里| https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |这个作业的目标| 功能设计与面向对象设…

项目冲刺11.15

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 作业要求这个作业的目标 进行为期七天的项目冲刺并记录前言 本篇博客是项目冲刺的第七篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客第七篇博客团队简介队名 拖延是你不…

Latex 安装

使用的开发环境是 VSCode. Latex 在编译时需要用到宏包. 宏包到底是啥? 有啥作用? 从何处下载? Latex 软件的安装:texlive: 一次性下载所有的宏包. 磁盘需求较大, 约 7 ~ 8 G.miktex: 仅下载必要的宏包, 编译时补充下载宏包. 磁盘需求较小, 约几百 M.清华大学开源软件镜像站…

20222424 2024-2025-1 《网络与系统攻防技术》实验五实验报告

20222424 2024-2025-1 《网络与系统攻防技术》实验五实验报告 1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 PS:…

Windows程序设计指南

Windows程序设计指南“到Petzold的书中找找”——仍然是解决Windows程式开发各种疑难杂症时的灵丹妙药。在第五版的《Windows程式开发设计指南》中,作者身为倍受敬重的WindowsPioneerAward(Windows开路先锋奖)得主,依据最新版本Windows作业系统,以可靠的取材资料校定这一本…

Windows高级调试

Windows高级调试中文版文档摘要: 本书《Windows高级调试》主要讲解Windows高级调试技术和工具,包括调试器简介、调试器揭密、符号文件与源文件的管理、栈内存破坏、堆内存破坏、安全、进程间通信、资源泄漏、同步、编写定制的调试扩展、64位调试、事后调试、Windows Vista基础…