zoukankan      html  css  js  c++  java
  • vfprintf()函数

    函数声明:int vfprintf(FILE *stream, const char *format, va_list arg)

    函数参数:

    stream—这是指向了FILE对象的指针,该FILE对象标识了流。

    format—c语言字符串,包含了要被写入到流stream中的文本。它可以包含嵌入的format标签,被随后的附加参数中指定的值所替代,并按照需求进行格式化。Format标签属性是%[flags][width][.precision][length]specifier。

    specifier说明符

    输出

    c

    字符

    d(i)

    有符号的十进制整数

    e

    E

    使用e字符的科学记数法(尾数和指数)

    使用E字符的科学记数法(尾数和指数)

    f

    十进制浮点数

    g

    自动选择%e或%f中合适的表示法

    G

    自动选择%E或%f中合适的表示法

    o

    有符号的八进制

    s

    字符的字符串

    u

    无符号的八进制

    x

    无符号的十六进制

    X

    无符号的十六进制(大写)

    p

    指针地址

    n

    无输出

    %

    字符

    Flags(标识)

    描述

    -

    在给定的字段宽度内左对齐,默认右对齐

    +

    强制在结果之前显示加号或减号(+或-)

    (space)

    如果没有写如何符号,在在该值前插入一个空格

    #

    与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。

    与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。

    与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除。

    0

    在指定填充padding的数字左边放置零(0)

    Width

    描述

    (number)

    要输出的字符最小数目,如果输出的值短于该数字,结果会用空格填充;如果结果长于该数,结果不会被截断

    *

    宽度在format字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前

    .precision

    描述

    .number

           对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符。

    对于 e、E 和 f 说明符:要在小数点后输出的小数位数。

    对于 g 和 G 说明符:要输出的最大有效位数。

    对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符。

    对于 c 类型:没有任何影响。

    当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0。

    *

           精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前

    Length(长度)

    描述

    h

    参数被解释为短整型或无符号短整型

    I

    参数被解释为长整形或无符号长整形,适用于整型说明符

    L

    参数被解释为长双精度型

    arg – 一个标识可变参数列表的对象。这应被<stdarg> 中定义的va_start宏初始化。

    函数返回值:如果成功,则返回字符总数,否则返回一个负数。

    实例:

    #include<stdio.h>
    #include<stdarg.h>
    
    void WriteFrmtd(FILE *stream, char *format,...)
    {
        va_list args;
        va_start(args,format);
        vfprintf(stream,format,args);
        va_end(args);
    }
    
    int main()
    {
        FILE *fp;
        fp = fopen("file.txt","w");
        WriteFrmtd(fp,"this is just onte argument %d 
    ",10);
        fclose(fp);
        return 0;
    }

    运行以下命令:

    exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ gcc vfprintf.c -o vfprintf

    exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ ./vfprintf

    执行结果:

    也可以使用以下程序来查看文件内容:

    #include<stdio.h>
    int main()
    {
        FILE *fp;
        int c;
        
        fp = fopen("file.txt","r");
        while(1)
        {
            c = fgetc(fp);
            if(feof(fp))
            {
                break;
            }
            printf("%c",c);
        }
        fclose(fp);
        return 0;
    }

    运行结果:

    exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ gedit check.c

    exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ gcc check.c -o check

    exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ ./check

    this is just onte argument 10

    函数解释:

    fgetc()函数:从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。

    表头文件:include<stdio.h>

    定义函数:int fgetc(FILE *stream);

    返回值:fgetc()会返回读取的字符,若返回EOF则表示到了文件尾,或出现了错误。

    feof()函数:

    检测文件结束符,若文件结束则返回非0值,否则会返回0.

    文件结束符只能被clearerr()清除。

    补充:

    EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0xFF(十进制为-1),因此可以用EOF作为文件结束标志。

    当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件

  • 相关阅读:
    个人收藏的flex特效网址【经典中的极品】
    JavaWEB开发国际化
    Java实现寻找和为定值的多个数
    Java实现寻找和为定值的多个数
    Java实现寻找和为定值的多个数
    Java实现寻找和为定值的多个数
    Java实现二进制幂
    Java实现二进制幂
    Java实现二进制幂
    Java实现二进制幂
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11152091.html
Copyright © 2011-2022 走看看