一、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("%s\n", 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.3f\n", 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.3f\n', a, b);
这个程序的输出结果与C语言相同。
七、fprintf的返回值
fprintf函数返回值具有与其他输出函数相同的特征:它会返回成功输出的字符数量(不包括\0)。如果发生错误,返回负数。
#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的缩写,意为格式化输出。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/201299.html