C语言 (printf、scanf函数解析)

printf

        printf函数——>二进制数据——>转换规范——>字符

        printf("占位符1 占位符2",替换1,替换2);

1、printf是一个变参函数

2、printf的第一个参数是字符串,是需要输出的内容

3、printf的第二及后续参数将依次替换占位符

4、占位符的类型和数量需要与后续参数一一对应

类型提升

        printf是一个可变参数函数,将参数传入函数的可变参数中变量会发生自动类型提升

有符号:

                char、short、int----printf函数---->int------>%d

                long----printf函数---->long------>%ld

                long long----printf函数----> long long------>%lld

无符号:

                unsigned char、unsigned short、unsigned int----printf函数---->unsigned int------>%u

                unsigned long----printf函数---->unsigned long------>%lu

                unsigned long long----printf函数----> unsigned long long------>%llu

转换规范

        %  -+0#  12  .4   l   d

                -+0#:零个或多个标志字符

                12    :一个可选的十进制表示的最小字段宽度

                .4     :点号表示精度范围

                 l      :长度指示符,可用:h\\hh\l\\ll\z表示

                d      :单个字符表示转换操作

转换操作:

                                c         字符类型

                                d         整型类型

                                e         双精度浮点型

                                E         双精度浮点型

                                f         双精度浮点型

                                o         无符号八进制整型

                                s         字符串

                                u         无符号整型

                                x         无符号十六进制整型

                                X         无符号十六进制整型

长度指示符           转换操作                    二进制字节长度n

l                                d或i                           sizeof(long)

ll                               d或i                           sizeof(long long)

l                                u或o或x或X              sizeof(unsigned long)

ll                               u或o或x或X              sizeof(unsigned longlong)

h                               d或i                           sizeof(short)

hh                             d或i                           sizeof(char)

h                               u或o或x或X              sizeof(unsigned short)

hh                             u或o或x或X              size(unsigned char)

#include <stdio.h>
int main()
{
    long l = 1234567890;
    long long ll = 12345783248578743;
    printf("%d\n",l);
    printf("%d\n",ll);  //输出错误
    return 0;
}
#include <stdio.h>
int main()
{
    unsigned int un = 0x12345678;
    printf("%hX\n",un);    //输出5678
    printf("%hhX\n",un);   //输出78
    return 0;
}

.4:点号表示精度范围,后面跟着十进制整数

        整数类型的转换操作,精度可以控制最小数字位数

        浮点类型的转换操作,精度可以控制小数点后位数

#include <stdio.h>
int main()
{
    int un = 123;
    double df = 123.456789;

    printf("%d.6d\n",un);    //000123
    printf("%f\n",df);       //123.456789
    printf("%.0f\n",df);     //123
    printf("%.4f\n",df);     //123.4567
    return 0;
}

12:十进制表示的最小字段宽度,如果不足用空格补足到指定的位置

#include <stdio.h>
int main()
{
    int un = 1234;
    double df = 123.456789;

    printf("%2d\n",un);   /1234            //最小宽度2位,实际4位,所有不处理
    printf("%6d\n",un);   /  1234          //最小宽度6位,实际4位,补2个空格
    printf("%12f\n",df);  /  123.456789    //最小宽度12位,实际10位,补2个空格
    return 0;
}

-+0#:

        使用0而不是空格作为填充字符

        使用最小字段宽度,如果指定标志0,则会用0来补齐最小宽度

#include <stdio.h>
int main()
{
    int n = 1234;
    
    printf("%6d\n",n);   /  1234
    printf("%06d\n",n);  /001234
    return 0;
}

-:让字符左对齐

+:让内容总产生符号,整数用+号,负数用-号

#:八进制前加上0,十六进制前加上0X

#include <stdio.h>
int main()
{
    int n = 1234;
    
    printf("%o\n",n);     //2322
    printf("%X\n",n);     //4D2
    printf("%#o\n",n);    //02322
    printf("%#X\n",n);    //0X4D2
    return 0;
}

scanf

        scanf函数——>键盘输入字符——>转换规范——>二进制

1、scanf是一个变参函数

2、scanf的第一个参数是字符串

3、scanf的第一个参数内容为匹配字符以及转换规范

4、scanf的后续参数是数据存放位置

        a、如果scanf将转换后的二进制存储到基本变量当中,在变量名前加&

        b、如果scanf将字符串存储到字符数组中,字符数组名不加 &

5、转换规范的写法与数量需要与后续的参数一一对应

scanf("%hhd  %hd %d %ld %f %lf",&c,&s,&n,&l,&f,&df);

                char    short     int  long  float  double 

         注:scanf会将输入的字符串与第一个字符串参数进行匹配,从而找到需要转换的部分。若字符串匹配失败,将无法得到转换结果。

        scanf将输入的字符串按照对应的转换规范进行转换,转换完成后的二进制,将依次存放到后续参数的变量地址中

 字符和字符串

#include <stdio.h>
int main()
{
    char c;
    scanf("%c",&c);           /A
    printf("%d %c\n",c,c);    /65  A
    return 0;
}
#include <stdio.h>
int main()
{
    char str[10];
    scanf("%s",str);
    printf("%s",str);
    return 0;
}

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值