一、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/zh-tw/n/201299.html