fprint详解(C语言fprintf)

一、fprintf函数

#include <stdio.h>

int fprintf(FILE *stream, const char *format, ...);

fprintf是输出函数之一,它可以将指定格式的数据输出到指定文件流中。其中,stream参数表示指向文件的指针,即将要输出的文件。format参数是格式化数据的字符串,它中间可以插入占位符,用来指定对应数据的格式。占位符以%开头,其后跟随一个或多个修饰符,表示输出数据的类型、位宽、精度等。最多可以输出strlen(format)个字符。

下面是一个例子:

#include <stdio.h>

int main()
{
    FILE *fp = fopen("output.txt", "w");
    fprintf(fp, "Hello, World!");
    fclose(fp);
    return 0;
}

这个程序会向output.txt文件中输出”Hello, World!”。可以发现,fprintf函数可以像printf一样将数据输出到屏幕或文件中。

二、fprintf中含有换行符

在输出中使用换行符是很常见的操作,可以通过n来实现。例如:

#include <stdio.h>

int main()
{
    FILE *fp = fopen("output.txt", "w");
    fprintf(fp, "Hello, World!n");
    fclose(fp);
    return 0;
}

这个程序会在输出的字符串后自动换行。

三、fprintf与fscanf

fprintf和fscanf都是输入输出函数,它们的用法类似。例如,可以将fprintf的输出结果作为fscanf的输入:

#include <stdio.h>

int main()
{
    FILE *fp = fopen("output.txt", "w");
    fprintf(fp, "Hello, World!n");
    fclose(fp);

    char s[100];
    FILE *fr = fopen("output.txt", "r");
    fscanf(fr, "%s", s);
    fclose(fr);

    printf("%sn", s);
    return 0;
}

这个程序会输出”Hello,”,因为fscanf只读取了第一个单词。如果想一次性读取整行,可以使用fgets函数:

#include <stdio.h>

int main()
{
    FILE *fp = fopen("output.txt", "w");
    fprintf(fp, "Hello, World!n");
    fclose(fp);

    char s[100];
    FILE *fr = fopen("output.txt", "r");
    fgets(s, 100, fr);
    fclose(fr);

    printf("%s", s);
    return 0;
}

这个程序会正确输出”Hello, World!”。

四、fprintf用法

fprintf格式化字符串中可以使用占位符来指定输出的数据格式。各种类型的占位符如下表所示:

%d 输出int类型的整数。
%ld 输出long int类型的整数。
%zd 输出size_t类型的整数。
%f 输出浮点数。
%lf 输出双精度浮点数。
%e 以科学计数法形式输出浮点数。
%s 输出字符串。
%c 输出字符。
%p 输出指针变量的地址。

除此之外,还可以使用修饰符来指定数据的位宽、精度、进制等。例如:

#include <stdio.h>

int main()
{
    int n = 1234;
    double x = 3.14159;
    printf("%8d, %10.3fn", n, x);
    return 0;
}

这个程序的输出结果是:

    1234,     3.142

其中,”%8d”指定n的位宽为8,”%10.3f”指定x的位宽为10,小数部分精确到3位。

五、fprintf函数的用法

除了输出到屏幕、文件外,fprintf还可以输出到网络套接字等各种输出流。例如:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
    struct sockaddr_in servaddr;
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(7777);
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));

    FILE *fp = fdopen(sockfd, "w");
    fprintf(fp, "Hello, World!n");
    fclose(fp);

    close(sockfd);
    return 0;
}

这个程序会将”Hello, World!”输出到127.0.0.1:7777对应的网络套接字中。

六、fprintf函数的用法matlab

在MATLAB中,也可以使用fprintf函数输出数据到屏幕或文件中。例如:

a = 1234;
b = 3.14159;
fprintf('%8d, %10.3fn', a, b);

这个程序的输出结果与C语言相同。

七、fprintf的返回值

fprintf函数返回值具有与其他输出函数相同的特征:它会返回成功输出的字符数量(不包括)。如果发生错误,返回负数。

#include <stdio.h>

int main()
{
    FILE *fp = fopen("output.txt", "w");
    int ret = fprintf(fp, "Hello, World!n");
    fclose(fp);
    printf("输出了%d个字符n", ret);
    return 0;
}

这个程序的输出结果是:输出了14个字符。

八、fprintf保存方式

使用fprintf时,需要注意打开文件的方式必须与输出方式匹配。例如:

#include <stdio.h>

int main()
{
    FILE *fp = fopen("output.txt", "r");
    fprintf(fp, "Hello, World!n");
    fclose(fp);
    return 0;
}

这个程序的输出结果是不确定的,因为fopen打开文件时指定了只读方式,而fprintf却要向文件中写入数据。

九、fprintf是什么意思

fprintf是formatted print的缩写,意为格式化输出。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平