当前位置:   article > 正文

C语言printf()中*的用法_printf *

printf *

printf()简介

  printf()函数是C语言标准库函数,用于格式化输出变量到标准输出。printf()申明于头文件stdio.h。

  printf函数原型如下:

#include <stdio.h>
int printf (const char *__format, ...)
  • 1
  • 2

  printf的格式控制字符串组成如下:

%[flags][width][.prec][length]type
  • 1

分别为:

%[标志][最小宽度][.精度][类型长度]类型。
  • 1

  类型如下:

类型type说明
%d十进制有符号整数
%u十进制无符号整数
%f、%lf单精度浮点数用f,双精度浮点数用lf
%s字符串
%c单个字符
%p指针的值
%e以指数形式表示浮点数
%x、 %X、%#x 、%#X输出十六进制
%o输出八进制

  标志如下:

标志type名称说明
-减号结果左对齐,右边填空格。默认是右对齐,左边填空格。
+加号输出符号(正号或负号)
space空格输出值为正时加上空格,为负时加上负号
#井号type是o、x、X时,增加前缀0、0x、0X
0数字零将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)

  如果想输出%号,需敲两个%,如printf("%%");

  符号*放置在宽度或精度位置时,则是为了实现动态格式输出,*代表某个变量值。一般%*.*或%.*在数值或字符串类型中使用较多。
  在scanf()中,*号的使用,与在printf()中的使用效果是完全不一样的

在printf()中的使用

字符串

  %*.*s,(1)点前面的*表示输出结果总宽度,(2)点后面的*表示待输出的字符个数。

  当*号在点前面时,如果*代表的参数值小于字符串的长度,则按原字符串的长度输出;如果*代表的参数值大于字符串的长度,则按参数长度输出,不足的在字符串左边补充空格。

  当*号在点后面时,如果*代表的参数值小于字符串的长度,则按参数值的长度输出;如果*代表的参数值大于字符串的长度,则按字符串实际长度输出。

#include <stdio.h>

int main()
{
    int  a   = 20;
    int  b   = 5;
    char s[] = "Hello world!";                /* 字符串总长度为12 */

    printf("0123456789----------\n");
    printf("%s\n", s);
    printf("%5s\n", s);
    printf("%20s\n", s);
    printf("%.5s\n", s);
    printf("%.20s\n", s);
    printf("%20.5s\n", s);
    printf("%5.20s\n", s);
    printf("%20.s\n", s);

    printf("0123456789----------\n");
    printf("%*s\n", a, s);                    /* 等同于printf("%20s\n", s)   */
    printf("%*.*s\n", a, b, s);               /* 等同于printf("%20.5s\n", s) */
    printf("%.*s\n", a, s);                   /* 等同于printf("%.20\n", s)   */

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

输出结果:

0123456789----------
Hello world!
Hello world!
        Hello world!
Hello
Hello world!
               Hello
Hello world!
                    
0123456789----------
        Hello world!
               Hello
Hello world!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

浮点型

  在C语言中,float使用%f,而double使用%lf。

  浮点型默认输出小数点后面6位。总长度中小数点也算一位 。在保留有效位的时候会进行四舍五入。

#include <stdio.h>

int main()
{
    float  f  = 3.14;
    double pi = 3.1415926;

    printf("0123456789----------\n");
    printf("%f\n", f);
    printf("%lf\n", pi);
    printf("%5.3lf\n", pi);             /* 会进行四舍五入*/           
    printf("%.10lf\n", pi);
    printf("%15.10lf\n", pi);
    printf("%*.*lf\n", 15, 10, pi);     /* 同printf("%15.10lf\n", pi); */
    
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

  输出结果:

0123456789----------
3.140000
3.141593
3.142
3.1415926000
   3.1415926000
   3.1415926000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在scanf()中的使用

  在scanf()函数中,添加了*的部分对应的输入会被忽略(枪毙掉),不会赋给参数。

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;

    printf("a = %d, b = %d, c = %d\n", a, b, c);
    scanf("%*d%d%d", &a, &b, &c);
    printf("a = %d, b = %d, c = %d\n", a, b, c);

    a = 0; 
    b = 0;
    c = 0;
    scanf("%d%*d%d", &a, &b, &c);
    printf("a = %d, b = %d, c = %d\n", a, b, c);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

  运行结果如下:

a = 0, b = 0, c = 0
23 45 61
a = 45, b = 61, c = 0
10 20 30
a = 10, b = 30, c = 0
  • 1
  • 2
  • 3
  • 4
  • 5

  如:

#include <stdio.h>

int main()
{
    char s1[10] = {'\0'};
    char s2[10] = {'\0'};
    char s3[10] = {'\0'};

    scanf("%*s%*s%s", s1, s2, s3);
    printf("s1 = %s, s2 = %s, s3 = %s\n", s1, s2, s3);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

运行结果:

hello apple nice
s1 = nice, s2 = , s3 = 
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/281596
推荐阅读
相关标签
  

闽ICP备14008679号