c语言--常见c库函数

1.printf
1.1.printf的输出控制符

格式控制符说明
%c输出一个单一的字符
%hd、%d、%ld以十进制、有符号的形式输出 short、int、long 类型的整数
%hu、%u、%lu以十进制、无符号的形式输出 short、int、long 类型的整数
%ho、%o、%lo以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数
%#ho、%#o、%#lo以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数
%hx、%x、%lx%、hX、%X、%lX以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx、%#hX、%#X、%#lX以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。
%f、%lf以十进制的形式输出 float、double 类型的小数
%e、%le、%E、%lE以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g、%lg、%G、%lG以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。
%s输出一个字符串
#include <iostream>
int main()
{
    printf("%%c=%c\n", 'a');
    printf("%%hd=%hd,%%d=%d,%%ld=%ld\n", 1000, 1000, 1000);
    printf("%%hu=%hu,%%u=%u,%%lu=%lu\n", 1000, 1000, 1000);
    printf("%%ho=%ho,%%o=%o,%%lo=%lo\n", 1000, 1000, 1000);
    printf("%%#ho=%#ho,%%#o=%#o,%%#lo=%#lo\n", 1000, 1000, 1000);
    printf("%%hx=%hx,%%x=%x,%%lx=%lx,%%hX=%hX,%%X=%X,%%lX=%lX\n", 1000,1000,1000,1000,1000,1000);
    printf("%%#hx=%#hx,%%#x=%#x,%%#lx=%#lx,%%#hX=%#hX,%%#X=%#X,%%#lX=%#lX\n", 1000, 1000, 1000, 1000, 1000, 1000);
    printf("%%f=%f,%%lf=%lf\n", 31.4, 31.4);
    printf("%%e=%e,%%le=%le,%%E=%E,%%lE=%lE\n", 31.4, 31.4, 31.4, 31.4);
    printf("%%g=%g,%%lg=%lg,%%G=%G,%%lG=%lG\n", 31.4, 31.4, 31.4, 31.4);
    printf("%%s=%s\n", "hello");
}

在这里插入图片描述
注意:从上述输出中%lX、%#lX的输出不太符合预期。

1.2.如何输出 %d\ 和双引号
要输出%d只需在前面再加上一个%,要输出\只需在前面再加上一个\,要输出双引号也只需在前面加上一个\即可。

#include <iostream>
int main(void)
{
    printf("%%d\n");
    printf("\\\n");
    printf("\"\"\n");
    return 0;
}

在这里插入图片描述
1.3.精度,显示宽度,对齐,符号

#include <iostream>
int main()
{
    printf("%%f=%f\n", 3.14);
    printf("%%10.3f=%10.3f\n", 3.14);
    printf("%%-10.3f=%-10.3f\n", 3.14);
    printf("%%+10.3f=%+10.3f\n", 3.14);
}

在这里插入图片描述
(1).精度
默认下小数点保留6位。使用m.nn可以显式指定小数点保留位数。n针对字符串时,可以指定要显示的字符数。
(2).显示宽度
m.n中的m用于控制数值显示的最小宽度,就是说显示宽度小于m时候,通过补充空格使得宽度达到m
(3).对齐
默认在高位补充空格,数值放在低位。如果采用-m.n,则在低位补充空格,数值放在高位。
(4).符号
输出的数值对正数默认不输出+,如输出控制前添加+,会输出+

2.变长参数

#include <iostream>
#include <stdarg.h>

void minprintf(char *fmt, ...) {
	va_list ap;
	va_start(ap, fmt);
	for (char* p = fmt; *p; p++)
	{
		if (*p != '%') {
			putchar(*p);
			continue;
		}
	
		switch (*++p) {
			case 'd':
				printf("%d", va_arg(ap, int));
				break;
			case 'f':
				printf("%f", va_arg(ap, double));
				break;
			case 's':
				printf("%s", va_arg(ap, char *));
				break;
			default:
				putchar(*p);
				break;
		}
	}
	va_end(ap);
}

int main()
{
    minprintf("s=%s\nd=%d\nf=%f\n", "hello", 10, 3.14);
}

在这里插入图片描述
2.1.可变形参
形参中...用于表示形参数量可变,每个形参类型不明确。
可变形参的...必须放在形参列表最后。
2.2.解析可变形参
(1).初始化

va_list ap;
va_start(ap, fmt);

(2).逐个提取可变形参

va_arg(ap, int);
va_arg(ap, double);
va_arg(ap, char *);

提取时候要么按照固定的约定去提取,要么采用上例中在前面形参中添加提示的方式来确定当前要提取形参的类型。
va_arg的返回值就是提取类型对应的形参的数值。
(3).结束

va_end(ap);

3.scanf
格式:%[数据宽度] [数据长度] 数据类型字符

3.1.数据类型

格式字符输出示例意义
dint a; scanf(“%d”,&a);输入十进制整数
uunsigned u; scanf(“%u”,&u);输入无符号十进制整数
oint a; scanf(“%o”,&a);输入八进制整数
xint x; scanf(“%x”,&x);输入十六进制整数
ffloat f; scanf(“%f”,&f);输入小数形式的实数
cchar c; scanf(“%c”,&c);输入单个字符
schar* s; scanf(“%s”,s);输入字符串
#include <stdio.h>
#include <string.h>
int main()
{
    int a;
    printf("int\n");
    scanf("%d",&a);
    printf("%d\n", a);
        
    unsigned u;
    printf("unsigned:\n");
    scanf("%u", &u);
    printf("%u\n", u);
        
    int o;
    printf("O:\n");
    scanf("%o", &o);
    printf("%d\n", o);

    int x;
    printf("x:\n");
    scanf("%x", &x);
    printf("%d\n", x);

    float f;
    printf("f:\n");
    scanf("%f", &f);
    printf("%f\n", f);
        
    char c;
    printf("c:\n");
    getchar();
    scanf("%c", &c);
    printf("%c\n", c);

    char s[1000];
    printf("s:\n");
    scanf("%s", s);
    printf("%s\n", s);

    return 0;
}

在这里插入图片描述

3.2.数据宽度
用十进制整数指定输入数据的宽度(即字符数),若输入字符数超出指定值,超出部分被截去。
例如:scanf("%5f",&Pi); 输入3.1415925scanf( ) 只是把 3.1415个字符存储在了变量中,其余部分被截去。

3.3.数据长度
长度格式符有 lh 两种。l 表示输入长整型数(如 %ld )或双精度浮点数(如 %lf )。h 表示输入短整型数或单精度浮点数。

3.4.注意
(1). 不支持精度控制。这样scanf("%.2f",&Pi);是非法的。
(2). 接收字符串输入时,遇到空格会认为输入结束。
(3). scanf遭遇失败场景,为了不影响后续处理,可能需要getchar()fflush(stdin);清理掉标准输入缓存中剩余数据。

伪随机数生成器

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main() {
    srand(time(NULL));
    for(int i = 0; i < 10; i++) {
        int r = rand();
        cout << r << endl;
    }    
    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值