fprint詳解

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-06 11:32
下一篇 2024-12-06 11:32

相關推薦

  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和算法 C語言貪吃蛇主要運用了以下數據結構和算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論