一、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
微信扫一扫
支付宝扫一扫