複習 struct score_Type{ int chinese,english; }; struct my_Type{

Slides:



Advertisements
Similar presentations
电子成绩单项目实现.
Advertisements

補充: Input from a text file
雷 霆 战 机 By—谷恩轩&余万全.
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
第十三章 文件.
C File System.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
複習 char name1[20]; //長度為20的字串 char name2[20]; //讀取字串 gets(name1);
计算概论 第二十一讲 文件操作 北京大学信息学院.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
If … else 選擇結構 P27.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第10章 文件操作.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
Introduction to the C Programming Language
Introduction to the C Programming Language
第9章 自訂資料型態 – 結構 9-1 結構資料型態 9-2 結構陣列 9-3 指標與結構 9-4 動態記憶體配置 9-5 聯合資料型態
STRUCTURE 授課:ANT 日期:2010/5/12.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
第10章 文件操作.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
C 語言簡介 - 2.
11.1 文件的基本概念 11.2 文件的打开与关闭 11.3 文件的顺序读写 11.4 文件的随机读写 11.5 文件检测
第十二章 文件 12.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件分类 按文件的逻辑结构: 按存储介质:
fp=fopen("CD2.dat","wb"); fwrite(&min,8,1,fp); fclose(fp);
第4章 MATLAB文件操作 4.1 文件的打开与关闭 4.2 文件的读写操作 4.3 数据文件定位.
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
程式設計 博碩文化出版發行.
第九章 文件 程序数据标准输入输出设备 程序数据文件 数据流和文件 文件的打开和关闭 文件读写函数.
File(檔案處理) 學習目標:開檔、讀檔、更新檔與關閉檔案.
THE C PROGRAMMING LANGUAGE
第10章 文件操作.
字符串和字符数组 字符串的输入和输出 字符串的基本操作
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫
ACM程序员大赛讲座 _____C语言程序设计要点 讲授人:王敬华.
Linux 文件操作——系统调用和标准 IO 库
第5章 文件.
第9章 文件操作 文件 使用文件的目的 操作系统管理数据的基本单位 存储在外存储器上的数据的集合
第十章 指针.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
研讨课4 文件操作.
PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
一、文件的基本概念 第十三章 文 件 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
第3章 變數、算術運算、 數學函數及輸入輸出.
函式庫補充資料.
實習十 開讀檔練習.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
C標準輸出入函數庫 與 作業系統.
輸出與輸入(I/O).
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
File Input and Output Chap. 11: 施威銘的書 Chap. 7: K&R.
本节内容 文件读写 视频提供:昆山爱达人信息技术有限公司.
第13章 文 件.
C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.
結構、檔案處理(Structure, File)
第七章 文件 7.1 文件的基本概念 7.2 文件类型指针 7.3 文件的打开与关闭 7.4 文件的读/写 7.5 文件的随机读/写
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
多重條件選擇敘述
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab2.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C语言程序设计 第13章 文件操作.
陣列與檔案處理 授課:張朝麟 日期:2009/3/11.
安排座位.
Presentation transcript:

複習 struct score_Type{ int chinese,english; }; struct my_Type{ char name[128]; int age; score_Type score; int main(){ struct my_Type student; strcpy(student.name,”David”); student.age=25; scanf(“%d %d”,&student.score.chinese,& student.score.english); }

複習 enum color{ RED, GREEN,BLUE }; int main(){ color background; scanf(“%d”,&background); if(background==RED){ printf(“RED\n”); } else if(background==GREEN){ printf(“GREEN\n”); else{ printf(“BLUE\n”);

Class 8 檔案處理

想一想 如果我們不僅僅想要將程式執行的結果輸出在螢幕上,而是想輸出到檔案中,該怎麼做呢? C語言提供了許多檔案處理的函式 把printf的結果轉到一個檔案中 檔案處理 C語言提供了許多檔案處理的函式 需要搭配一個資料型態為FILE的指標來使用

檔案指標 檔案指標指向一個含有檔案資訊的結構 資訊包括 使用者不需知道檔案指標的細節,所有定義可由<stdio.h>獲得 緩衝區的位置 緩衡區內現在字元的位置 目前檔案正在被讀取、寫入或檔案結束 使用者不需知道檔案指標的細節,所有定義可由<stdio.h>獲得 就像printf()我們只需include而不需寫定義一樣

檔案指標 2 FILE *fp; fp是一個指標指向FILE FILE就像int只是一個型別名稱 在<stdio.h>中用typedef定義,而不是一個結構標籤 C函式庫中已經宣告好3個FILE *的指標,分別是stdin、stdout、stderr printf("...")事實上是呼叫fprintf( stdout, "....") scanf("...")事實上是呼叫fsanf( stdin, "..." ) fprintf( stderr, "....")所印在螢幕上的東西不會被輸出轉向所影響

檔案格式 C的函式可以用來建立兩種格式的檔案 文字檔案格式(text file) 二元檔案格式(binary file) 將資料轉換成字元的格式存入檔案 存放的東西都是肉眼可視的英文字母或數字符號等 二元檔案格式(binary file) 將數值的內容原封不動使用它的二進位方式直接存入檔案中

檔案格式 2 int a=100000; 用途 若用文字檔來存,存下來的會是”100000”這個字串,佔7個byte 若用二進位檔來存,存下來的是0x186A0的的二進位值,固定佔4個byte,因為int型態就是占4個byte 用途 文字檔格式通常用來列印報表,或是讀入人為製作的檔案 二元檔案處理速度快、佔的空間小

檔案處理流程

開啟檔案與關閉檔案 fopen 開啟檔案 fclose 關閉檔案

fopen 程式中叫用的方法如: 第一個參數是字串,指出檔案名稱 第二個參數是模式,也是一個字串 模式有r、w、a三種: fp = fopen(name, mode); 第一個參數是字串,指出檔案名稱 第二個參數是模式,也是一個字串 模式有r、w、a三種: r :唯讀模式(read) w :寫入模式(write) a :增加模式(append),從檔案最後面繼續寫入 如果希望同時擁有讀寫檔案的權利,可以在模式字串加+ r+ :以主模式r開啟檔案 w+ :以主模式w開啟檔案 a+ :以主模式a開啟檔案

fopen 2 希望以二元模式開啟時,可以在模式字串加b 打開一個不存在的檔案來寫入或附加在檔案尾端 rb:代表以唯讀模式即二元檔案格式開啟 打開一個不存在的檔案來寫入或附加在檔案尾端 檔案必須儘可能先被建立 打開一個存在的檔案寫入時,舊的檔案內容會被刪除 若是增加模式(a)就會保留它們,並寫入到檔案尾端 嘗試讀一個不存在的檔案會造成錯誤,讀取一個不被允許讀取的檔案也會產生錯誤 假如有錯誤產生 fopen 會傳回NULL

fclose fclose(FILE *fp); 在檔案不用時,關閉該檔案 關閉檔案時會強迫仍在電腦緩衝區的所有資料才真正輸出到檔案裡頭

範例練習 自己製作一個test.txt檔案,並利用fopen開啟該檔案 若成功開啟則不會有錯誤訊息,反之會有錯誤訊息

讀/寫檔案 fprintf(FILE *p, ...) 除了前面加個檔案指標外,其餘與printf()一樣 範例練習:開啟test.txt檔案,並嘗試寫入一些訊息

課堂練習 讓使用者可以輸入多個學生姓名和成績後,輸出到檔案student.txt 使用者可以按0離開成績輸入系統或按其他鍵繼續輸入 提示:while(1) 配合break;

fscanf() fscanf(FILE *p, ...) 除了前面加個檔案指標外,其餘與scanf()一樣 注意:通常fprintf()和fscanf()都是用來處理文字格式檔案

fread() fread(pointer to variable, item size, item number, FILE *fp) 從fp所指到的檔案讀一個整數(4 bytes)到num所指的記憶體 int num; fread(&num, sizeof(int), 1, fp); 從fp所指到的檔案讀一個字串(10 bytes)到str所指的記憶體 char str[10]; fread(str, sizeof(str), 1, fp);

fwrite() fwrite(pointer to variable, item size, item number, FILE *fp) 從num所指的位址寫一個整數(4 bytes)到fp所指的檔案之中 fwrite(&num, sizeof(int), 1, fp); 注意 通常fread()和fwrite()都是用來處理二元格式檔案

get v.s. put fgetc(FILE *fp) fputc(int c, FILE *fp) printf("We read a character %c from the file.\n",fgetc(fp)); fputc(int c, FILE *fp) 將字元c寫入fp所指的檔案。 scanf("%c",&ch); fputc(ch, fp); fgets(char *buffer, int max_char_num, FILE *fp) 從fp所指到的檔案讀入一個字串到buffer,最多只允許max_char_num-1個字元 與gets()不同的是,fgets()函式會保留換行字元 fputs(const char *str, FILE *fp) 將str這個字串的內容寫到fp所指的檔案裡面 與puts()不同的是,fputs()不會自動加上換行字元

其他檔案處理函式 feof(FILE *fp) 用來判斷檔案游標是否已經到了檔案的結尾 if(feof(fp)) printf("We reach the end-of-file.\n"); 課堂練習:用文字編輯器編好一個資料檔,接著撰寫一個程式將資料檔的內容印出。(fscanf())

補充 1 2 3 J A C EOF 1 2 3 J A C \n EOF 寫法一 fscanf(fin,”%s”,line); while(!feof(fin)){ fscanf(fin,”%s”,line); printf(“%s\n”,line); } 適用情況(結尾沒空白or換行) 不適用(結尾有空白or換行) ↓ ↓ 1 2 3 J A C EOF ↓ ↓ ↓ 1 2 3 J A C \n EOF

補充 1 2 3 J A C EOF 1 2 3 J A C \n EOF 寫法二 fscanf(fin,”%s”,line); while(1){ fscanf(fin,”%s”,line); if(feof(fin))break; printf(“%s\n”,line); } 不適用情況(結尾沒空白or換行) 適用(結尾有空白or換行) ↓ ↓ 1 2 3 J A C EOF ↓ ↓ ↓ 1 2 3 J A C \n EOF

其他檔案處理函式 2 ferror(FILE *fp) rewind(FILE *fp) 用來判斷檔案讀寫是否出現問題 if(ferror(fp)) printf("We encounter file access error.\n"); rewind(FILE *fp) 將檔案游標重設到檔案的開頭,並將錯誤旗標(flag)重設

fseek() fseek(FILE *fp, how man bytes to move, where to start) SEEK_SET 表示從檔案開頭起算 SEEK_CUR 表示目前游標位置起算 SEEK_END 表示從檔案結尾起算 how many bytes 正值表示往檔案結尾移動,負值表示往開頭 fseek(fp,0,SEEK_SET); //跟rewind一樣移到檔案開頭 fseek(fp,1,SEEK_CUR); //檔案指標向後移動一個byte

檔案游標移動實例

檔案處理函式原型和回傳值 FILE fopen(const char *,const char *) 成功傳回檔案指標,失敗傳回NULL int fclose(FILE *) 成功傳回0,失敗傳回EOF int fprintf(FILE *, const char *, ...) 傳回寫出字元個數,失敗傳回EOF int fscanf(FILE *, const char *, ...) 傳回讀入字元個數,失敗傳回EOF int fread(void *, size_t, sizet, FILE *) 傳回讀入項目個數 int fwrite(void *, size_t, sizet, FILE *) 傳回寫出項目個數 int fseek(FILE *, int, int) 成功傳回0,失敗傳回非0值 void rewind(FILE *) int feof(FILE *) 已到檔尾傳回非零值,否則傳回0 int ferror(FILE *) 發生錯誤傳回非零值,否則傳回0 void perror(const char *)

exit() 被叫用時,程式終止執行 參數由程式自行設定 exit會對每個打開的輸出檔案叫用 fclose,強迫清光任何一個緩衝區 if( (fp=fopen(fname,"r")) == NULL ) { printf("The file doesn't exist.\n"); exit(0); } 參數由程式自行設定 一般來說傳入的值是 0 則通知執行成功 非零則表示有不正常的情況 exit會對每個打開的輸出檔案叫用 fclose,強迫清光任何一個緩衝區

綜合練習 綜合練習1 請將toUpper.txt檔案內容讀入,將其轉為大寫,並輸出到檔案UpResult.txt 綜合練習2: (47.14) score.txt檔案是全班50位同學的的考試成績,試著讀入它,並算出全班的平均成績輸出在螢幕上 綜合練習3: (53.74) score2.txt是另一種格式的檔案,同樣是50位同學的成績,試者讀入它,並算出全班同學的平均成績輸出在螢幕上

考前複習 給一個陣列 函式+指標的使用 結構 字串的處理 如何找出最大值 如何排序 =>氣泡排序 如何搜尋裡面的資料 => 二元搜尋 函式+指標的使用 如何傳陣列進去 結構 如何定義自己的資料型態 => struct 字串的處理 如何複製一個字串 如何將字串轉為大寫or小寫 如何比較字串大小or是否相等

考前複習 檔案 亂數 其他 如何開檔或寫檔 =>fprintf,fopen,fscanf,fclose,feof 如何產生一特定範圍的亂數 (rand()%(最大-最小+1)+最小 其他 如何判斷是否被整除 scanf何時要加& 如何輸入有空白的字串 …