C/C++ Programming

Similar documents
C/C++ Basics

CC213

新・明解C言語入門編『索引』

_汪_文前新ok[3.1].doc

epub 33-8

附錄C.doc

CC213

Microsoft PowerPoint - C-Ch12.ppt

CC213

Microsoft PowerPoint - Class5.pptx

C/C++基礎程式設計班

White Sketchpad PowerPoint Presentation

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

FY.DOC

93年各縣國中教師甄試最新考情.doc

上海市教育考试院关于印发新修订的

C 1

奇特的一生(Эта странная жизнь)

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Microsoft PowerPoint - 20-string-s.pptx

文件

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

C/C++ 语言 - 循环

The golden pins of the PCI card can be oxidized after months or years

,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : : : /16 : : 96 : : : ISBN 7

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

C/C++语言 - C/C++数据

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

AUCWA0501p00A.indd

Microsoft PowerPoint - STU_C_Lang_CH13.ppt

untitled

PowerPoint 演示文稿

C

nooog

資料結構之C語言重點複習

chap12.ppt

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

CH09

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

[改訂新版]C言語による標準アルゴリズム事典

劉立民 現職 中原大學應用數學系副教授 世新大學資管系副教授 學歷 美國紐澤西理工學院資訊博士 (1999) 雪城大學資科所碩士 (1994) 經歷 美國紐澤西州立. 肯恩大學. 資訊科學系助理教授 Pumpkin Networks Inc., (Sunnyvale CA) 資深工程師 / 專案經理


C 語言—陣列及字串

封面-12

2008国优评审会讲稿

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

C++ 程式設計

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

untitled

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

投影片 1

epub 9-11

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

untitled

设计任务书.doc

Ps22Pdf

全国计算机技术与软件专业技术资格(水平)考试

第3章 类型、运算符与表达式

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

運算子多載 Operator Overloading

Microsoft Word - ACL chapter02-5ed.docx

C/C++语言 - 分支结构


Maasa停車場管理系統

023 深 圳 市 融 信 软 件 技 术 有 限 公 司 SZ 深 圳 市 深 博 泰 生 物 科 技 有 限 公 司 SZ 深 圳 市 移 付 宝 科 技 有 限 公 司 SZ 深 圳 市 奥 金 瑞 科 技 有 限 公 司 SZ

<4D F736F F D205BCAE9B0FCCDF85DC8FDC9FAC8FDCAC0CAAEC0EFCCD2BBA82E646F6378>

Microsoft Word - 考试大纲 (2)

提问袁小兵:

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

2015年计算机二级(C语言)模拟试题及答案(四)

51 C 51 isp 10 C PCB C C C C KEIL

我的生命哲學 五觀三一 陳學霖

Microsoft PowerPoint - 07_IO.ppt

ebook8-30


<4D F736F F D B0EABB79A4E5B8D5C344BBBCB065AAA9>


康體藝術

公共圖書館利用教育方案規劃之研究

3.1 num = 3 ch = 'C' 2

ebook15-C

宁夏专业技术人员服务平台

中国证券业协会远程培训系统

概述

华恒家庭网关方案

內政部役+政署100年採購標案辦理情形一覽表2[1].doc

寻医问药指南(十七)

Microsoft Word - chap13.doc

<4D F736F F D20D1A7C9FACAD6B2E1B8C4D7EED6D5A3A8B4F8B1EDB8F1BCD3D2B3C2EBB0E6A3A9372E3239>

桂林市劳动和社会保障局关于

第三章 維修及管理

Microsoft Word 年度选拔硕博连读研究生的通知.doc

投影片 1

目 录 第 五 部 分 第 六 部 分 第 七 部 分 第 八 部 分 投 标 邀 请 投 标 人 须 知 附 表 评 标 方 法 和 评 分 细 则 项 目 需 求 和 技 术 方 案 要 求 1

四川省普通高等学校

Transcription:

!281 第 十講 檔案輸入與輸出 講師 : 李根逸 (Ken-Yi Lee), E-mail: feis.tw@gmail.com

!282 課程 大綱 與作業系統或其他軟體溝通 (API) [P.283] <stdio.h> 檔案相關函式表 [P.284] 開啟與關閉檔案 (fopen, fclose) 讀寫純 文字檔 (fscanf, fprintf) 讀寫 二進位檔 (fread, fwrite) 前置處理器 : [P.292] 專案 : 把程式分散在多個檔案 [P.294] 前置處理器 :#define [P.295]

!283 與作業系統或其他軟體函式庫溝通 為了便利程式設計師容易設計與維護複雜的電腦軟體 一般的開發環境下我們會遇到下 面幾類元件 硬體 : 磁碟 鍵盤和滑 鼠等 作業系統 : Windows Linux Mac OS 等 其他應 用軟體或函式庫 :IE, Word, OpenGL 等 傳 入參數 API 其他應 用軟體或函式庫 送回資料 API 自定型態 [ 結構 ] ( 動態配置 ) 我們設計的程式 API C 標準函式庫 API 作業系統 驅動程式 硬體 在 C 裡就是函式呼叫

Unix-like: 使 用 man 指令查詢 Windows: 使 用 MSDN 查詢!284 <stdio.h> 檔案相關函式表 FILE 是個定義在 <stdio.h> 內的結構, 用來描述檔案資訊 函式宣告 FILE *fopen(const char *fn, const char *m); int fclose(file *fp); int fscanf(file *fp, const char *fmt,...) int fprintf(file * fp, const char * fmt,...); size_t fread(void *ptr, size_t sz, size_t cnt, FILE *fp ); size_t fwrite(const void *ptr, size_t sz, size_t cnt, FILE *fp); int fseek(file *fp, long int offset, int origin); int feof(file *fp); 說明 用 m 模式開啟名為 fn 的檔案 關閉 fp 檔案 依 fmt 格式從 fp 檔案讀 入資料 依 fmt 格式對 fp 檔案寫 入資料 從 fp 檔案讀 入每筆 大 小為 sz 的資料, 共 cnt 筆, 存放在 ptr 對 fp 檔案寫 入 ptr 所指向每筆 大 小為 sz 的資料, 共 cnt 筆 在 fp 檔案中, 將位置移動到相對於 origin 點 offset 的位置 檢查 fp 是否已經讀到檔尾 (EOF)

!285 文字檔與 二進位檔 文字檔是將記憶體內容經由轉換成 文字後 用 ASCII 碼儲存, 優點是對 人來說可讀性 高, 缺點是存取較慢且可能會浪費檔案空間 常 見的 文字檔案有 : 文字檔 (.txt), 網 頁檔 (.html) 與 CSV 檔 (.csv), 這些檔案我們可以 用記事本直接開啟 二進位檔是將記憶體內容直接儲存 至檔案中, 優點是讀取與空間效率 高, 缺點是對 人來說可讀性較差 常 見的 二進位檔有 : word 檔 (.doc),png 圖 片檔 (.png),jpeg 圖 片檔 (.jpg) 與 BMP 圖 片檔 (.bmp) 大部分應 用程式的檔案都是 二進位檔! 範例 : 怎麼在檔案儲存 12345678 這個整數?

!286 開啟檔案 FILE *fopen(const char *filename, const char *mode); filename 用來指定檔案路徑 ( 包含檔名 ) mode 指定開啟該檔案所使 用的模式 r 讀取, w 寫 入, a 附加寫 入 一個已經存在的檔案會將原檔案內容清除如果開啟檔案失敗 ( 例如檔名錯誤 ) 則 fopen 會傳回 一個 NULL 值 ( 空指標 ) #define NULL 0 開啟檔案成功時 fopen 會傳回 一個指向 FILE 結構的位址 試著去找尋 文件說明!

!287 範例 寫純 文字檔 int main() { FILE *fp = fopen("grade.txt", "w"); int num; printf(" 請輸 入學 生 人數 : "); scanf("%d", &num); 當 fopen 開啟檔案 for (int i = 1; i <= num; ++i) { 失敗時會回傳 NULL char username[100]; 值 ( 空指標 ) int grade; printf(" 請輸 入姓名與成績 : "); scanf("%99s", username); scanf("%d", &grade); fprintf(fp, "%s %d\n", username, grade); fclose(fp); system("pause"); return 0; 範例 write_text_file.cpp

!288 範例 讀純 文字檔 int main() { FILE *fp = fopen("grade.txt", "r"); while (1) { char username[100]; 我們可以 用 int int grade; feof(file *) fscanf(fp, "%s", username); 來檢查檔案是否已經到了結尾 fscanf(fp, "%d", &grade); if (feof(fp)) { break; printf(" 姓名 : %s (%d)\n", username, grade); fclose(fp); system("pause"); return 0; 範例 read_text_file.cpp

!289 範例 寫 二進位檔 int main() { FILE *fp = fopen("bin.txt", "wb"); int num; printf(" 請輸 入學 生 人數 : "); scanf("%d", &num); for (int i = 1; i <= num; ++i) { int grade; char username[100]; printf(" 請輸 入姓名與成績 : "); scanf("%99s", username); scanf("%d", &grade); fwrite(username, sizeof(username), 1, fp); fwrite(&grade, sizeof(grade), 1, fp);! fclose(fp); system("pause"); return 0; username (char x 100) grade (int x 1) username (char x 100) grade (int x 1) 範例 write_bin_file.cpp

!290 範例 讀 二進位檔 int main() { FILE *fp = fopen("bin.txt", "rb"); while (1) { char username[100]; int grade; fread(username, sizeof(username), 1, fp); fread(&grade, sizeof(grade), 1, fp);! if (feof(fp)) { break; printf(" 姓名 : %s (%d)\n", username, grade); fclose(fp); system("pause"); return 0; username (char x 100) grade (int x 1) username (char x 100) grade (int x 1) 範例 read_bin_file.cpp

!291 範例 使 用結構寫檔與讀檔 結構通常可以搭配 fwrite 寫檔與 fread 讀檔, 與 fprintf 和 fscanf 不同, 此時檔案通常並不是作為純 文字檔在讀寫, 而是類似將記憶體內容直接寫 入或讀出, 所以直接 用 文字模式觀看檔案會有些看起來近似亂碼的內容 用結構與 二進位檔的優點? fseek 可移動檔案 至指定位元組 隨機存取 (random access) username (char x 100) grade (int x 1) 範例 write_struct_file.cpp 範例 read_struct_file.cpp

!292 標頭檔名稱 可以引 入標頭檔 標頭檔 一般是放置函式 結構和型別宣告的地 方 這是屬於 C 前置處理器的功能 使 用 可以讓不同的檔案使 用相同的宣告 概念上 會將指定的標頭檔內容複製貼上於 的地 方 標頭檔名稱 用 括住會優先於 目前的 目錄下找此檔案 標頭檔名稱 用 <> 括住會優先於系統的 目錄下找此檔案 file.h write_file.cpp read_file.cpp

!293 將程式分散在多個檔案 當我們要將函式定義放置在不同的檔案時就會 面臨連結失敗 (linking error) 的問題 試著將 db.cpp 的 show 跟 read 函式定義放置在不同檔案 前置處理 # 編譯連結 C, C, CPP 檔案 C, C, CPP 檔案 O, O, OBJ 檔案 EXE 檔案 db.cpp student.h show.cpp read.cpp

!294 專案 (Project) 為了在連結時知道哪些檔案是要 一起考慮的, 我們需要專案 (Project) 來幫我們 一個專案內 一般來說只會有 一個主函式 (main) 在 Dev C++ 中 : 使 用 File > New > Project > Empty Project 新增空 白專案使 用 Project > Add to Project 或 Project > New File 來將程式檔案加 入專案內 db 專案 db.cpp student.h show.cpp read.cpp

!295 #define 前置處理 前置處理器還有 一個常 見的語法就是 #define, 功能是做尋找取代或者巨集 :!!! #define M_PI 3.14159265358979323846 int main() { printf( PI = %f\n, M_PI); return 0; 經過前置處理器後會變成 :! int main() { printf( PI = %f\n, 3.14159265358979323846);! return 0;! 好處是不會真的存在 M_PI 這個變數 (?)

!296 習題 [1] [E1001] 試寫 一程式 (keyin) 讓使 用者輸 入學 生 人數後, 再輸 入每個學 生的座號和三個不同科 目 (Chinese, Math 和 English) 的成績, 並將這些資料寫 入檔案 (db2.txt) 在這裡我們可以假設最多 60 個學 生 [E1002] 再寫 一程式 (query) 自動從檔案 (db2.txt) 讀出資料後, 讓使 用者輸 入座號後顯 示該學 生的各科成績