C語言 文件的讀寫

引入

OS操作系統
在這里插入圖片描述

打開文件fopen()函數

讀寫模式:
r:讀取已有文件
w:文件不存在,創建文件并寫入文件.文件存在,內容清零,再寫入文件
a: 文件不存在,創建文件并寫入文件.文件存在,以追加的形式寫入文件

r+:讀寫已有文件
w+:文件不存在,創建文件并讀寫文件.文件存在,內容清零,再讀寫文件
a+:文件不存在,創建文件并讀寫文件.文件存在,以追加的形式寫文件,從頭開始讀文件

總結:
1)
r,r+已有文件
w,w+,a,a+:已有文件+創建文件
2)如果是二進制文件,要在后面加一個b
3)以w,w+模式會將文件清空

在這里插入圖片描述

關閉文件fclose()函數

關閉成功,返回0
關閉失敗,返回EOF
總結:
1)
EOF:C標準函數庫中表示文件結束符(end of file)
在while循環中以EOF作為文件結束標志,這種以EOF作為文件結束標志的文件,必須是文本文件。
2)如果不關閉文件,我們的內容就沒有保存在文件中

在這里插入圖片描述

寫入文件的函數

輸出流

fputc()寫入一個字符,成功:返回寫入的字符,失敗:返回EOF
fputs()寫入一個字符串,成功:返回一個非負值,失敗:EOF
fprintf()寫入一個字符串, 成功:返回寫入的字符的個數,失敗:返回負數

在這里插入圖片描述
案例
庫變量:
FILE:一個適合存儲文件流信息的對象類型
在這里插入圖片描述

代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//寫入文件--fputc(),fputs(),fprintf()
int main()
{printf("1.創建文件空指針\n");FILE *fp=NULL;printf("2.創建一個文件\n");/*d:/與平時的轉義字符\相反*/fp=fopen("d:/AAADQLearning/test_file.txt","a");//w寫入文件,存在,清零;不存在,創建//a寫入文件,存在,追加;不存在,創建printf("3.fputc寫入一個字符a\n");char rc=fputc('m',fp);//成功,返回寫入的字符,失敗,返回EOFfputc('\n',fp);printf("4.fputs寫入一個字符串\n");int rs=fputs("dq,as a result\n",fp);//成功,返回0,失敗返回EOFprintf("5.fprintf寫入一個字符串\n");int rf=fprintf(fp,"as good as\n");//成功,返回傳入的字符個數;失敗,返回負數printf("rc=%c rs=%d rf=%d\n",rc,rs,rf);//m 0 11printf("寫入完成!\n");printf("關閉文件指針\n");fclose(fp);getchar();return 0;
}

讀取文件的函數

fgetc()讀取一個字符,成功,返回讀取的字符,失敗,返回EOF
fgets()讀取n-1字符串, 成功時返回字符串地址,錯誤或0讀入時返回NULL
fscanf()讀取字符串, 成功,返回正確讀入項目(items)的個數,錯誤時返回EOF
總結:
1)
fgets()讀取n-1個字符,把字符串復制給緩沖區,在末尾追加一個null
fscanf()讀取時遇到空格符會停止讀取,直接返回目前讀到的結果

在這里插入圖片描述
案例
1)案例1
在這里插入圖片描述
2)案例2
在這里插入圖片描述

讀取文件代碼
代碼1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//讀取文件--fgetc(),fgets(),fscanf()
//輸入流
int main()
{//創建文件指針FILE *fp=NULL;fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:讀取已有文件r+讀寫已有文件char buff[1024];//使用緩沖區裝讀取到的字符char rc=fgetc(fp);char *rs=fgets(buff,sizeof(buff),fp);//讀取1024個字符,字符串一行一行地讀取char *temp="";int rf=fscanf(fp,temp);//fscanf()遇到換行符了,所以什么也沒讀取到就返回了strcat(buff,temp);/*fgetc()成功:返回讀取到的字符,失敗,返回EOFfgets()成功:返回讀取到的字符串(地址),失敗,返回NULLfscanf()成功,返回成功讀取的個數,失敗,返回EOF*/printf("rc=%c rs=%s rf=%d\n",rc,rs,rf);printf("讀取的內容:\nbuff=%s\n",buff);fclose(fp);//關閉文件指針printf("讀取完成!\n");getchar();return 0;
}

代碼2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//循環讀取文件--fgetc(),fgets(),fscanf()
//輸入流
int main()
{//創建文件指針FILE *fp=NULL;fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:讀取已有文件r+讀寫已有文件char buff1[1024];//使用緩沖區裝讀取到的字符char buff2[1024];//使用fgets()循環一行行地讀取文件printf("fgets():\n");while(fgets(buff1,1024,fp)!=NULL)//只有這樣才行{//輸出緩沖區中的內容printf("%s",buff1);}//使用fscanf()循環一行行地讀取文件printf("fscanf():\n");//fscanf()遇到空格和換行時結束//所以fscanf(fp,"%s",buff2)!=EOF//表示遇到空格符或換行時,結束這一個循環,直接進行下一個循環,從沒有空格和換行符的地方讀取//最終輸出:沒有空格與換行,直接輸出一行很長的字符串while(fscanf(fp,"%s",buff2)!=EOF){printf("%s",buff2);}//使用fgetc()循環地讀取文件printf("fgetc():\n");//fgetc()會一個字符一個字符地輸出,最終輸出所有內容while(fgetc(fp)!=EOF){printf("%c",fgetc(fp));}fclose(fp);//關閉文件指針printf("讀取完成!\n");getchar();return 0;
}

讀寫文件綜合代碼

#include<stdio.h>
#include<stdlib.h>
//文件--讀寫文件綜合
const int size=100;
int main()
{//寫文件--輸出流FILE *fpw=NULL;fpw=fopen("D:/AAADQLearning/test_write.txt","a+");//寫文件int i;for(i=0;i<100;i++){fprintf(fpw,"arr[%d]\n",i);}printf("完成寫入!\n");//讀文件--輸入流FILE*fpr=NULL;fpr=fopen("D:/AAADQLearning/test_file.txt","r+");//讀文件char buff[1024];while(fgets(buff,1024,fpr)!=NULL){//把讀取到的文件內容追加到test_write.txt文件中//輸出流fputs(buff,fpw);}printf("讀取并寫入文件完成!\n");//關閉文件指針fclose(fpr);fclose(fpw);getchar();return 0;
}

補充

1.文件相關的函數使用時返回的結果

fgetc():成功時返回讀入的字節數。錯誤或文件尾時返回EOF;
fputc():成功時返回寫入的字節數。錯誤時返回EOF;
fgets():成功時返回字符串地址,錯誤或0讀入時返回NULL;
fputs():成功時返回一個非負整數,錯誤時返回EOF
fprintf():成功時返回寫入的字節數,錯誤時返回負數(negative value)
fscanf():返回正確讀入項目(items)的個數,錯誤時返回EOF
fwrite():返回正確寫入項目的個數,錯誤時返回0
fread():返回正確讀入項目的個數,錯誤時返回0
fseek():成功返回0,錯誤返回-1。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

StarWind V2V Image Converter:虛擬機鏡像轉換工具,可將 IMG 文件轉換為 VMware VMDK 文件

操作流程 選擇本地的需要轉換的文件找到源文件的路徑&#xff0c;img格式選擇轉化后的格式 第一個選擇 第二個 速度快一些選擇將轉化后的文件的存儲路徑軟件的下載鏈接 鏈接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取碼: 5vmv

數學建模基礎知識

原型與模型 模型的分類 數學建模 數學建模的分類 成為建模大神 數學建模比賽 數學建模一般步驟 數學建模全過程 數學建模論文寫作 1&#xff09;摘要:是決定最后獲獎等級的關鍵 2&#xff09;問題重述:使用自己的語言將問題重述一次 3&#xff09;符號說明:對于常見的或…

數學建模 線性規劃模型基本原理

線性規劃問題 例1.1 可行解&可行域 matlab標準形式及軟件求解 標準形式: C稱為價值向量 如果是求max,加一個負號-c^T 如果是求Ax>b,加一個負號-Ax<b 使用matlab求線性規劃例題 求解的是最大值:加上負號 y是求解的最優解 zeros()使用: zeros(n)&#xff1a;生…

接上文 ,解決 虛擬機VM,U盤(磁盤)裝有系統,將其中系統安裝到另外一塊磁盤的具體操作

問題原因&#xff1a;接上文&#xff0c;將生成的vsdk格式的磁盤導入VM創建鏡像&#xff0c;相關于U盤裝載系統鏡像&#xff0c;將U盤其中的鏡像導入到磁盤里邊&#xff0c;U盤是引導&#xff0c;會將系統最終裝載到磁盤出錯原因是因為 沒有新建第二塊磁盤 解決 新增一塊磁盤如…

數學建模 層次分析法

簡介 針對多目標,多準則或無結構特性的復雜決策問題 步驟 解決評價類問題 評價類問題: 資料查找: 1)查找相關文獻 2)如果沒有找到相關文獻 3)搜索 通過上述步驟后得到的結果 構建層次結構模型 舉例: 成對比較矩陣 標度表: 奇數:越大越重要 偶數:上述兩相鄰判斷的中值…

ubuntu配置靜態IP地址

sysconf_client update -t network -j {"netdev":"eth0","ip":"a.b.c.d","mask":"255.255.255.0"}

接上文 VM安裝的ubuntu系統,配置雙網卡

點擊編輯 進入虛擬網絡編輯器 點擊更改設置 補充&#xff1a;如何判定橋接至哪張網卡&#xff1f;進入win&#xff0c;winr 輸入cmd&#xff1b;輸入 systeminfo選中系統&#xff0c;點擊右鍵&#xff0c;選中設置 重啟系統使用 ifconfig查看&#xff0c;發現有eth0和eth1…

數學建模 趣味數模問題(數模入門)

狼羊人菜渡河問題 解答 試探法 因為有4個變量,所以一共有222*216種狀態 找出其中不安全的狀態:無人看守的狀態下:狼羊一起,羊菜一起 人 狼 羊 菜(0是在對面,1是在這邊) 狼羊一起:(0,1,1,0) (0,1,1,1) (1,0,0,0) (1,0,0,1) 羊菜一起:(0,0,1,1) (1,1,0,0) 其余的10個都是安全狀態…

數學建模 整數規劃的基本原理和標準形式

整數規劃模型 變量限制為整數 一般解決運輸問題和整數問題 分類: 研究的是純整數規劃問題 整數規劃特點 實數的解不能直接四舍五入為整數,因為此時可能不滿足約束條件 舉例-合理下料問題 模型: 題目: 這是在使用材料 1)使用零件A1-Am毛胚,就是使用零件 2)下料方式B1-Bn就…

程序員 面試筆記 C++ 程序設計的基礎 第10章

10.1.1 程序的編譯和執行 以#開頭的代碼都屬于預處理器處理的步驟#include 將頭文件的內容包含進入當前源文件中#define 展開宏定義#ifdef 處理條件編譯指令(#ifdef、ifndef、#if、#else、#elif、#endif)#other 處理其他宏指令(#error、#warning、#line、#pragma) 預…

數學建模 分支限界算法求解整數規劃原理以及編程實現

引入 線性規劃問題(松弛問題) 圖解法: 使用圖解法求出最優解,再使用四舍五入求出的整數解不滿足條件 完全枚舉法(窮舉法):找出集合內所有滿足條件的整數點,再帶入不等式中,看是否有最優解 分支限界法 說明: 松弛問題:線性規劃問題 ILP:整數規劃,在線性規劃的基礎上對決策…

java Map統計字符串中元素的數量

public int firstUniqChar(String s) {Map<Character, Integer> map new HashMap();char[] chars s.toCharArray();//先統計每個字符的數量for (char ch : chars) {map.put(ch, map.getOrDefault(ch, 0) 1);}//然后在遍歷字符串s中的字符&#xff0c;如果出現次數是1就…

數學建模 割平面算法求解整數規劃基本原理與編程實現

基本思想 松弛問題:線性規劃 割掉一塊全部都是小數的區域(這一部分取不到整數) 案例 1)橫坐標x1,縱坐標x2 2)藍色小三角形的區域:x2:(1,7/4) x1:(0,3/4) 這塊區域,x1與x2完全取不到整數,所以直接切去 所以,此時取值范圍變化了: x2<1把此約束條件帶入,得到x11,x21,z2 3…

Linux dd命令 復制(拷貝)文件,并對原文件進行轉換

dd&#xff0c;是 device driver 的縮寫&#xff0c;它可以稱得上是“Linux 世界中的搬運工”&#xff0c;它用來讀取設備、文件中的內容&#xff0c;并原封不動地復制到指定位置。其實現在的主流硬盤已經是 SATA 接口的了&#xff0c;下面我要備份的硬盤是 dev/sda&#xff0c…

數學建模 匈牙利算法求解整數規劃基本原理與編程實現

投資問題(0-1規劃) 匈牙利算法求解0-1規劃問題 解答: 項目之間是互斥關系,所以使用x1x2x31; 項目5是以項目1為先驗條件,所以x5<x1,意味著x11時,x51或0 ,但x10時,x50 案例- 互斥約束問題 1)當兩個約束條件是互斥時,新建立一個約束條件y(0-1) 2)如果M取無窮大的數,此時就…

Ubuntu通過可視化界面配置 查找IP地址不存在的解決辦法

命令行用ifconfig eno0 up&#xff0c;啟用網卡&#xff0c;沒有問題&#xff0c;硬件ok&#xff0c;但是配置里面還是找不到。之前修改了 /etc/network/interfaces&#xff0c;去掉配置。由于圖形界面使用的是 network-manager&#xff0c;所以需要修改重啟sudo service netwo…

數學建模 非線性規劃原理的應用與編程實現

非線性規劃模型NP 包含非線性函數:不是直線而是曲線、曲面、或不確定的屬性,叫非線性。 如:x^2 線性函數:一次函數,axb 列1-投資決策問題 解答: 設置決策變量: 1)投資某個項目達到收益最高,使用比值法(更直觀) 收益/投資花費 取值范圍 1)*非線性規劃中常用 限制xi0或1(在編…

C++ STL list添加(插入)元素方法詳解

C STL list添加&#xff08;插入&#xff09;元素方法詳解主要內容主要內容 參考鏈接

數學建模1 賽前準備 賽題選擇 查找文獻

了解國賽 生成了MD5碼之后就不能再碰文件&#xff0c;打開都不行 軟件安裝 其他 ABC賽題特點 一般選擇B,C題 賽題選擇 1.排除背景都看不懂的題 定題 1.少數服從多數 2.選擇資料多的題 搜索技巧 1.雙引號–“CT參數標定”&#xff08;內容或標題一致&#xff09; 2…