首页 > 其他分享 >头文件讲解

头文件讲解

时间:2024-11-15 23:41:32浏览次数:1  
标签:字符 头文件 函数 scanf 参数 讲解 字符串 读取

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 截断为整数

标签:字符,头文件,函数,scanf,参数,讲解,字符串,读取
From: https://www.cnblogs.com/mycrictfchuyin/p/18548900

相关文章