`
sofire
  • 浏览: 146174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

writef和printf函数的学习程序

阅读更多
和C函数的格式相同。

只是printf和writef中的 s 意思不一样

不知道C语言中是否有用 * 号来表示宽度和精度。
D语言中,可以用*号来表示。它需要对应个数字,像 %d一样要对应一个数字。

  ("%*d", 5, 1)   相当于 ("%5d", 1)  表示宽度
  ("%.*d", 5, 1)  相当于 ("%.5d", 1) 表示精度

正好,char[] 表示的是长度和字符串。
和 %*s %.*s 吻合
所以可以用在printf函数中表示D语言的一个char[] 类型
不知道这2种形式有没有啥区别,但只是都能正常显示。

附上代码:

import std.stdio;
import std.string;
import std.c.string;

class A
{
}

void main()
{
    char[] str;

    str = "abcde";

    str ~= "\0";
    printf("string(%d) '%s'\n", strlen(cast(char*)str), cast(char*)str);
    writefln("string(%d) :%s", str.length, str);

    str = "edcba";
    printf("string(%d) '%s'\n", strlen(cast(char*)str), toStringz(str));
    writefln("string(%d) :%s", str.length, str);
    writefln("%s", str);

    // 区别
    printf("the string is '%.*s'\n", "aaaaaaaaaaaaa我");
    printf("the string is '%*s'\n", "aaaaaaaaaaaaa我");

    int a = 456;
    printf("d: %d %05d %+d |%-5d| |%5d| |% d| |% d|"\n, a, a, a, a, a, a, -a);        // 十进制
    writef("d: %d %05d %+d |%-5d| |%5d| |% d| |% d|"\n, a, a, a, a, a, a, -a);        // 十进制
    printf("*: |%*d| |%-*d| |%.*d| |%*.d|"\n, 5, a, 5, a, 5, a, 5, a);
    writef("*: |%*d| |%-*d| |%.*d| |%*.d|"\n, 5, a, 5, a, 5, a, 5, a);

    printf("u: %u %05u %+u |%-5u| |%5u|"\n, a, a, a, a, a);        // 十进制无符号
    //writef("u: %u %05u %+u |%-5u| |%5u|"\n, a, a, a, a, a);        // 十进制无符号
    //
    printf("o:  %o %#o"\n, a, a);        // 八进制
    writef("o:  %o %#o"\n, a, a);        // 八进制

    printf("x: %X %x %#x %#X %05x |%-5x|"\n, a, a, a, a, a, a);        // 十六进制
    writef("x: %X %x %#x %#X %05x |%-5x|"\n, a, a, a, a, a, a);        // 十六进制

    float f = 2.1, f2 = 2222222, f3 = 0.1111111111;
    printf("f: %f |%.3f| |%5f| |%3.5f| |%5.3f|"\n, f, f2, f3, f, f);        // 浮点数
    writef("f: %f |%.3f| |%5f| |%3.5f| |%5.3f|"\n, f, f2, f3, f, f);        // 浮点数

    float e = 2.1, e2 = 2222222, e3 = 0.1111111111;
    printf("e: %e |%.3e| |%5e| |%3.5e| |%5.3e|"\n, e, e2, e3, e, e);        // 指数
    writef("e: %e |%.3e| |%5e| |%3.5e| |%5.3e|"\n, e, e2, e3, e, e);        // 指数

    printf("g: %g |%.3g| |%5g| |%3.5g| |%5.3g|"\n, e, e2, e3, e, e);        // 十六进制
    writef("g: %g |%.3g| |%5g| |%3.5g| |%5.3g|"\n, e, e2, e3, e, e);        // 十六进制

    printf("a: %a |%.3a| |%5a| |%3.5a| |%5.3a|"\n, e, e2, e3, e, e);        // 不懂
    writef("a: %a |%.3a| |%5a| |%3.5a| |%5.3a|"\n, e, e2, e3, e, e);        // 不懂

    // * 号作为宽度标志和精度标志
    printf("*: |%*f| |%-*f| |%.*f| |%*.f| |%*.*f|"\n, 5, e, 5, e, 5, e, 5, e, 8, 3, e);
    writef("*: |%*f| |%-*f| |%.*f| |%*.f| |%*.*f|"\n, 5, e, 5, e, 5, e, 5, e, 8, 3, e);

    A aa = new A;
    int[] ab = [1, 2, 3];
    writef("s: %s %s %s %s %s %s", true, -10, -2.0001, "abc", aa, ab);

}

分享到:
评论

相关推荐

    6步教你在STM32程序中添加 printf函数

    通过以上六个步骤,您可以在STM32程序中成功添加printf函数,从而能够方便地进行调试和输出信息。这一过程涉及到USART配置、时钟管理、以及printf函数的重定向等关键环节,为嵌入式开发提供了强大的调试工具。

    深入剖析printf函数

    ### printf函数的调用过程和系统调用 printf函数是C语言标准库中的一个重要函数,用于向标准输出设备(通常是屏幕)输出格式化的字符串。为了深入理解printf函数,我们需要首先了解它的调用过程。printf函数属于...

    STM32F4 UART4重定向printf和scanf函数

    在开发过程中,通过重定向`printf`和`scanf`函数至UART4,我们可以将程序的输出直接发送到串口,便于在不依赖其他硬件的情况下进行实时调试。 首先,`printf`和`scanf`是C语言中的标准输入输出函数,它们分别用于...

    x86平台实现的printf函数

    总之,实现x86平台上的`printf`函数是一个涉及C语言编程、x86汇编语言、系统调用、内存管理和错误处理等多个方面的综合任务。这不仅是提升编程技能的好机会,也是对计算机系统底层工作原理的深入探索。通过这样的...

    GD32 Printf重定向

    `printf`是C语言标准库中的一个格式化输出函数,用于向标准输出设备(通常是显示器)打印字符串和变量。在GD32上,我们希望将`printf`的输出重定向到USART0,以便通过串口线发送到计算机或其他设备进行查看。 要...

    FATFS常用函数详解

    本篇文章旨在详细介绍FATFS库中的常用函数,帮助开发者更好地理解和运用这些函数来实现文件系统的管理与操作。 #### 1. 变量定义 FATFS中定义了多种文件访问模式,例如: - `FA_READ`: 指定读取模式。允许从文件...

    STM32F103C8T6标准库-printf重定向

    在STM32F103C8T6标准库中,可以使用printf函数输出调试信息,但默认情况下,printf函数输出到串口,需要使用串口调试助手等工具查看输出结果。如果想要将printf函数的输出重定向到其他设备或接口,可以使用重定向...

    ft_printf:重新实现printf函数

    `printf`函数的使用方式是基于一种格式化字符串,它可以包含文本和特殊占位符,例如`%d`用于整数,`%c`用于字符,`%f`用于浮点数等。`ft_printf`项目的核心目标就是解析这样的格式化字符串,并根据其指示来输出相应...

    keil中使用printf通过串口输出字符的方法

    ### 使用Keil MDK中的printf函数通过串口输出字符的方法 在嵌入式开发中,尤其是在使用Keil MDK环境进行编程时,我们经常会遇到需要调试程序的情况。这时候,能够通过串口输出一些调试信息就显得尤为重要了。本文将...

    stm32f429 RTOS CUBE实现printf输出以及单字节接收

    本文将详述如何在STM32F429上使用RTOS(这里假设为FreeRTOS)并结合CUBE(STM32CubeMX配置工具)来实现printf函数的输出以及单字节的接收功能。 首先,我们需要使用STM32CubeMX来配置STM32F429的硬件环境。在CUBE中...

    fatfs操作函数.txt

    ### FATFS操作函数知识点 #### 文件操作 ...这些函数覆盖了文件和目录操作的基本需求,是开发基于FAT文件系统应用程序的基础。通过熟练掌握这些函数,开发者可以构建出高效稳定的文件系统应用程序。

    linuxc函数参考手册

    此外,手册可能还会涉及一些特定于Linux的函数,如文件系统操作(如`open`、`read`和`write`)、进程管理(如`fork`、`execve`和`waitpid`)、信号处理(如`signal`和`raise`)以及网络编程(如`socket`、`bind`和`...

    printf_c#console._DEMO_printf_zip_源码

    在C#中,我们通常使用`Console.WriteLine`和`Console.Write`方法来替代`printf`,它们可以接受字符串和对象参数,自动进行类型转换和格式化。但如果我们需要`printf`那样的灵活性,可以自定义一个方法来实现。 在...

    嵌入式文件系统函数说明

    17. `f_printf`: 向文件输出格式化的字符串,类似C语言的`printf`函数。 底层的磁盘I/O操作是通过一组特定的函数实现的,包括`disk_initialize`(初始化磁盘驱动器)、`disk_status`(获取磁盘状态)、`disk_read`...

    C语言程序设计实例(200行)

    #### 时间函数举例程序分析 **程序92** 该程序的主要目的是展示如何在C语言中获取系统当前的时间,并将其格式化为可读的形式输出。 1. **程序分析** - 程序首先包含了`stdio.h`与`time.h`两个头文件。 - 定义...

    21.STM32_printf

    在开发过程中,我们常常需要对程序运行的状态进行调试和信息输出,这时`printf`函数就显得尤为重要。`printf`是C语言标准库中的一个输出函数,用于格式化输出数据到标准输出设备,如控制台或串口。 STM32中的`...

    IDL读取数据文件程序整理

    在读取自由文件格式时,IDL使用ReadF函数从文件中读入自由格式数据,Printf函数写入自由格式数据到文件中。在读取自由文件格式时,IDL遵循以下几个规则: 1. 如果读入到字符串变量中,那么,在当前行剩下的所有字符...

Global site tag (gtag.js) - Google Analytics