<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 文件的順序讀寫 按照字符讀寫文件fgetc,fputc ## 按照字符讀寫文件 ### 寫文件fputc ~~~ #include<stdio.h> int fputc(int ch, FILE * stream); 功能: 將ch轉換為unsigned char后寫入stream指定的文件中 參數: ch: 需要寫入文件的字符 stream: 文件指針 返回值: 成功: 成功寫入文件的字符 失敗: 返回-1 ~~~ 1. 被寫入的文件可以用寫、讀寫、追加方式打開,用寫或讀寫方式打開一個已存在的文件時將清除原有的文件內容,并將寫入的字符放在文件開頭。如需保留原有文件內容,并把寫入的字符放在文件末尾,就必須以追加方式打開文件。不管以何種方式打開,被寫入的文件若不存在時則創建該文件。 2. 每寫入一個字符,文件內部位置指針向后移動一個字節 ### 讀文件fgetc ~~~ #include<stdio.h> int fgetc(FILE * stream); 功能: 從stream指定的文件中讀取一個字符 參數: stream: 文件指針 返回值: 成功: 返回讀取到的字符 失敗: -1 ~~~ 在文件內部有一個位置指針,用來指向當前讀寫到的位置,也就是讀寫到第幾個字節。在文件打開時,該指針總是指向文件的第一個字節。使用 fgetc() 函數后,該指針會向后移動一個字節,所以可以連續多次使用 fgetc() 讀取多個字符。 注意:這個文件內部的位置指針與C語言中的指針不是一回事。位置指針僅僅是一個標志,表示文件讀寫到的位置,也就是讀寫到第幾個字節,它不表示地址。文件每讀寫一次,位置指針就會移動一次,它不需要你在程序中定義和賦值,而是由系統自動設置,對用戶是隱藏的 ### 文件結尾feof 在c語言中,EOF表示文件結束符,在while循環中以EOF作為文件結束標志,這種以EOF作為文件結束標志的文件.這種以EOF為結束標志的文件,必須是文本文件.在文本文件中,數據都是以字符的ASCII代碼值的形式存放的.我們知道,ASCII代碼值的范圍是0~127,不可能出現-1,因此可以用eof作為文件結束標志 > EOF 不絕對是 -1,也可以是其他負數,這要看編譯器的實現 ~~~ #define EOF(-1) ~~~ #### 對 EOF 的說明 EOF 本來表示文件末尾,意味著讀取結束,但是很多函數在讀取出錯時也返回 EOF,那么當返回 EOF 時,到底是文件讀取完畢了還是讀取出錯了?我們可以借助 stdio.h 中的兩個函數來判斷,分別是 feof() 和 ferror() 當把數據以二進制形式存放到文件中時,就會有-1值出現,因此不能采用EOF作為二進制文件的結束標志.為解決這一個問題,ASCII c 提供一個feof函數,用來判斷文件是否結束.feof函數即可以用來判斷二進制文件又可以用來判斷文本文件 ~~~ #include<stdio.h> int feof(FILE * stream); 功能: 檢測是否讀取到了文件結尾.判斷的是最后一次"讀操作的內容",不是當前位置內容(上一個內容) 參數: stream: 文件指針 返回值: 非0值: 已經到文件結尾 0: 沒有到文件結尾 ~~~ feof() 函數用來判斷文件內部指針是否指向了文件末尾,它的原型是: ~~~ int feof ( FILE * fp ); ~~~ 當指向文件末尾時返回非零值,否則返回零值。 ferror() 函數用來判斷文件操作是否出錯,它的原型是: ~~~ int ferror ( FILE *fp ); ~~~ 出錯時返回非零值,否則返回零值。 需要說明的是,文件出錯是非常少見的情況,上面的示例基本能夠保證將文件內的數據讀取完畢。如果追求完美,也可以加上判斷并給出提示 ## 按照字符串讀寫文件 ### 寫文件fputs 寫入成功返回非負數,失敗返回 EOF ~~~ #include <stdio.h> int fputs(const char * str, FILE * stream); 功能: 將str所指定的字符串寫入到stream指定的文件中,字符串結束符'\0'不寫入文件 參數: str: 字符串 stream: 文件指針 返回值: 成功: 0 失敗: -1 ~~~ ### 讀文件fgets fgets() 函數用來從指定的文件中讀取一個字符串,并保存到字符數組中 ~~~ #include <stdio.h> char * fgets(char * str, int size, FILE * stream); 功能: 從stream指定的文件內讀入字符,保存到str所指定的內存空間,直到出現換行字符,讀到文件結尾或是已讀了size-1個字符為止,最后會自動加上字符'\0'作為字符串結束 參數: str: 字符串,字符數組 size: 指定最大讀取字符串的長度(size-1) stream: 文件指針 返回值: 成功: 成功讀取的字符串,也就是首地址 失敗: 讀到文件尾或出錯NULL ~~~ ## 按照格式化讀寫文件 ### 寫文件fprintf ~~~ #include<stdio.h> int fprintf(FILE * stream, const char * format, ...); 功能: 根據參數format字符串來轉換并格式化數據,然后將結果輸出到stream指定的文件中,指定出現字符串結束符'\0'為止 參數: stream: 已經打開的文件 format: 字符串格式,用法和printf()一樣 返回值: 成功: 實際寫入文件的字符個數 失敗: -1 ~~~ ~~~ fprintf(fp, "%d %d %d\n", 1, 2, 3); ~~~ ### 讀文件fscanf ~~~ #include<stdio.h> int fscanf(FILE * stream, const char * format, ...) 功能: 從stream指定的文件讀取字符串,并根據參數format字符串來轉換并格式化數據 參數: stream: 已經打開的文件 format: 字符串格式,用法和scanf()一樣 返回值: 成功: 參數數目,成功轉換的值的個數 失敗: -1 ~~~ ~~~ int a = 0; int b = 0; int c = 0; fscanf(fp, "%d %d %d\n", &a, &b, &c); printf("a=%d, b=%d, c=%d\n", a, b, c); ~~~ ## 按照塊讀寫文件 fgets() 有局限性,每次最多只能從文件中讀取一行內容,因為 fgets() 遇到換行符就結束讀取。如果希望讀取多行內容,需要使用 fread() 函數;相應地寫入函數為 fwrite() 對于 Windows 系統,使用 fread() 和 fwrite() 時應該以二進制的形式打開文件 ### 寫文件fwrite ~~~ #include<stdio.h> size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE * stream); 功能: 以數據塊的方式給文件寫入內容 參數: ptr: 準備寫入文件數據的地址 size: size_t為unsigned int類型,此參數指定寫入文件內容的塊數據大小 nmemb: 寫入文件的塊數,寫入文件數據總大小為: `size * nmemb` stream: 已經打開的文件指針 返回值: 成功: 實際成功寫入文件數據的塊數目,此值和nmemb相等 失敗: 0 ~~~ 對參數的說明: * ptr 為內存區塊的指針,它可以是數組、變量、結構體等。fread()?中的?ptr 用來存放讀取到的數據,fwrite()?中的 ptr 用來存放要寫入的數據。 * size:表示每個數據塊的字節數。 * nmemb:表示要讀寫的數據塊的塊數。 * stream:表示文件指針。 * 理論上,每次讀寫 size\*nmemb 個字節的數據 size\_t 是在 stdio.h 和 stdlib.h 頭文件中使用 typedef 定義的數據類型,表示無符號整數,也即非負數,常用來表示數量 返回值:返回成功讀寫的塊數,也即 nmemb。如果返回值小于 nmemb: * 對于 fwrite() 來說,肯定發生了寫入錯誤,用 ferror() 函數檢測。 * 對于 fread() 來說,可能讀到了文件末尾,可能發生了錯誤,可以用 ferror() 或 feof() 檢測 ### 讀文件fread ~~~ #include<stdio.h> size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); 功能: 以數據塊的方式從文件中讀取內容 參數: ptr: 存放讀取出來數據的內存空間 size: size_t為unsigned int類型,此參數指定讀取文件內容的塊數據大小 nmemb: 讀取文件的塊數,讀取文件數據總大小: size*nmemb stream: 已經打開的文件指針 返回值: 成功: 實際成功讀取到內容的塊數,如果此值比nmemb小,但大于0,說明讀到文件的結尾. 失敗: 0 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看