printf的输出格式控制符、格式修饰符、转义字符

格式控制符:

  • %d用于输出十进制有符号整数。
  • %u用于输出十进制无符号整数。
  • %f用于输出十进制浮点数字。
  • %e 或 %E:用于输出指数形式的浮点数。
  • %g 或 %G:用于输出浮点数,根据数值大小自动选择使用 %f 或 %e
  • %o :用于输出无符号八进制。
  • %x 或 %X用于输出无符号十六进制。
  • %c用于输出单个字符。
  • %s:用于输出字符串。
  • %p:用于输出指针地址。
  • %lu用于输出无符号长整型。
  • %lld 或 %I64d:用于输出有符号长长整型。
  • %llu 或 %I64u:用于输出无符号长长整型。
  • %Lf用于输出长双精度浮点数。
  • %% 格式控制符:用来输出百分号 %,在输出时需要使用两个百分号连在一起。

格式修饰符:

  • -:左对齐。
  • +:输出符号(正数前面加上“+”)。
  • #:八进制前缀(0)、十六进制前缀(0x 或 0X)或浮点数小数点(.)。
  • 0:用 0 在左侧填充数据输出的空白,而不是默认的空格字符。
  • m.nm 是指定的最小宽度,n 是指定的精度。
  • *:用来接收动态传入的宽度和精度。例如,%*.*f 表示输出浮点数,宽度和精度由后面带两个 int 类型的参数动态传入。

转义字符:

  • \a:警报(响铃)。
  • \b:退格(回退)一格。
  • \f:换页。
  • \n:换行。
  • \r:回车。
  • \t:水平制表符。
  • \v:垂直制表符。
  • \\:反斜杠。
  • \':单引号。
  • \":双引号。
  • \?:问号。
  • \0:字符串结束标志。

C语言输出函数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 <stdio.h>

int main()
{
    int a = 10;
    int b = -10;
    float c = 6.6f;
    double d = 3.1415926;
    double e = 10.10;
    char f = 'a';
    // 有符号整数(可以输出负数)
    printf("a = %d\n", a); // 10
    printf("a = %i\n", a); // 10

    // 无符号整数(不可以输出负数)
    printf("a = %u\n", a); // 10
    printf("b = %u\n", b); // 429496786

    // 无符号八进制整数(不可以输出负数)
    printf("a = %o\n", a); // 12
    printf("b = %o\n", b); // 37777777766

    // 无符号十六进制整数(不可以输出负数)
    printf("a = %x\n", a); // a
    printf("b = %x\n", b); // fffffff6

    // 无符号十六进制整数(不可以输出负数)
    printf("a = %X\n", a); // A
    printf("b = %X\n", b); // FFFFFFF6

    // 单、双精度浮点数(默认保留6位小数)
    printf("c = %f\n", c); // 6.600000
    printf("d = %lf\n", d); // 3.141593

    // 以指数形式输出单、双精度浮点数
    printf("e = %e\n", e); // 1.010000e+001
    printf("e = %E\n", e); // 1.010000E+001
    
    // 以最短输出宽度,输出单、双精度浮点数
    printf("e = %g\n", e); // 10.1
    printf("e = %G\n", e); // 10.1
    
    // 输出字符
    printf("f = %c\n", f); // a
    
    return 0;
}

C语言输出函数printf格式控制符的作用(进阶用法)

printf格式控制符完整格式:%[flag][width][.precision]type

(1)type如上所述;

(2)flag:标志字符,详情见下表:

  flag 作用

  -  表示左对齐。如果没有,就按照默认的对齐方式,默认一般为右对齐。

  +  用于整数或者小数,表示输出符号(正负号)。如果没有,那么只有负数才会输出符号。

  空格  用于整数或者小数,输出值为正时冠以空格,为负时冠以负号。

  #

  1)对于八进制(%o)和十六进制(%x / %X)整数,# 表示在输出时添加前缀;八进制的前缀是 0,十六进制的前缀是 0x / 0X。对于小数(%f / %e / %g)2)# 表示强迫输出小数点。如果没有小数部分,默认是不输出小数点的,加上 # 以后,即使没有小数部分也会带上小数点。

(3)width表示宽度;

(4) .precision 表示输出精度,也就是小数的位数。

  ①当小数部分的位数大于 precision 时,会按照四舍五入的原则丢掉多余的数字;

  ②当小数部分的位数小于 precision 时,会在后面补 0。

  此外,亦可用与字符串和整数:

  ①用于字符串时,.precision 表示最大输出宽度,或者说截取字符串。当字符串的长度大于 precision 时,会截掉多余的字符;当字符串的长度小于 precision 时,.precision 就不再起作用。

  ②用于整数时,.precision 表示最小输出宽度。与 width 不同的是,整数的宽度不足时会在左边补 0,而不是补空格。

部分用法示例

代码如下:

#include <stdio.h>

int main(void) 
{
    int a = 10, b = 20, c = 30;
    printf("%5d,%5d,%5d\n",a,b,c);
    printf("%.5d,%.5d,%.5d\n", a, b, c);
    printf("%-5d,%-5d,%-5d\n\n", a, b, c);

    int d = 10;
    printf("%d,%+d\n",d,d);
    printf("% d\n\n",d);

    double e = 5.6789;
    printf("%.2lf\n",e);
    printf("%.10lf\n", e);
    printf("%.0lf\n", e);
    printf("%#.0lf\n\n", e);

    char f[10] = "abcdefghi";
    printf("%.3s,%.7s\n", f, f);
    return 0;
}

输出结果如下图:

 代码演示:

#include <stdio.h>
 
int main() 
{
    int a = 123;         // 整型
    unsigned int b = 456;// 无符号整型
    double c = 1.23;     // 浮点数
    double d = 12345.678; // 指数形式浮点数
    int e = 0x123;       // 十六进制

    char f = 'a';   // 字符
    char g[] = "hello world";    // 字符串
    int* h = &a;    // 指针地址

    unsigned long i = 1234567890ul;// 无符号长整型
    long long j = -123450000000ll;// 有符号长长整型    
    long double l = 1.23;// 长双精度浮点数
    unsigned long long k = 123450000000ull;// 无符号长长整型

    int num = 123;
    double fnum = 3.14159;

    printf("%d\n", a); // 输出 123
    printf("%u\n", b); // 输出 456
    printf("%f\n", c); // 输出 1.230000
    printf("%e\n", d); // 输出 1.234568e+04
    printf("%x\n", e); // 输出 123


    printf("%c\n", f); // 输出 a
    printf("%s\n", g); // 输出 hello world
    printf("%p\n", h); // 输出 a 的地址
 
 
    printf("%lu\n", i); // 输出 1234567890 
    printf("%lld\n", j); // 输出 -123450000000
    printf("%Lf\n", l); // 输出 1.230000
    printf("%llu\n", k); // 输出 123450000000
 
 
    printf("%%\n"); // 百分号转义输出 %
 
    // 格式修饰符
    printf("%-5d\n", num); // 输出 123   (左对齐)
    printf("%+d\n", num); // 输出 +123(输出符号)
    printf("%#x\n", num); // 输出 0x7b(十六进制前缀)
    printf("%05d\n", num); // 输出 00123(用 0 左对齐填充)
    printf("%.2f\n", fnum); // 输出 3.14 (精度控制)
    printf("%*.*f\n", 8, 2, fnum); // 输出    3.14 (动态宽度和精度,从后面两个 int 参数中传入)
 
    // 转义字符
    printf("hello\tworld\n"); // 输出 hello    world
 
    return 0;
}

 输出结果如下图:

 

对于修饰符和格式控制符的使用,可以参考具体的 C 语言教程或参考手册,根据实际需要选择使用。同时,可以使用 printf 函数的返回值来判断是否输出成功。

scanf()输入十进制,八进制和十六进制值

scanf 输入十六进制

在这里,我们将声明一个无符号的char变量,并输入不同格式的值,例如十进制格式,八进制格式和十六进制格式。

  • 输入和打印十进制值–我们使用“%d”格式说明符

  • 输入和打印八进制值–我们使用“%o”格式说明符

  • 输入和打印十六进制值–我们使用“%x”格式说明符

#include <stdio.h>
 
int main(void) 
{
    //data range of unsigned char is in,
    //1) decimal format 0 to 255
    //2) octal format 0 to 377
    //3) hexadecimal format 0 to ff
    
    unsigned char var;
    printf("Enter decimal value b/w 0 to 255: ");
    scanf("%d", &var);
    printf("var = %d\n", var);
 
    printf("Enter octal value b/w 0 to 377: ");
    scanf("%o", &var);
    printf("var = %o\n", var);
 
    printf("Enter hexadecimal value b/w 0 to ff: ");
    scanf("%x", &var);
    printf("var = %x\n", var);
 
    return 0;
}

输出量

Enter decimal value b/w 0 to 255: 198
var = 198
Enter octal value b/w 0 to 377: 172
var = 172
Enter hexadecimal value b/w 0 to ff: f9
var = f9

翻译自: https://www.includehelp.com/c-programs/input-decimal-octal-and-hexadecimal-values-in-character-variables.aspx

posted on 2024-03-11 22:37  一郎哥哥  阅读(1001)  评论(0编辑  收藏  举报

导航