Microsoft PowerPoint - C-Ch12.ppt

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

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

Microsoft PowerPoint - 20-string-s.pptx

C/C++ Programming

C/C++ Basics

Ps22Pdf

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

untitled

C 1

nooog

Microsoft PowerPoint - C-Ch11.ppt

epub 33-8

文件

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

untitled

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

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

chap12.ppt

C

Microsoft Word - chap13.doc

Microsoft PowerPoint - C-Ch10.ppt

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


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

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("%

PowerPoint 演示文稿

CC213

第3章.doc

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

untitled

Microsoft PowerPoint - ch11.ppt

C/C++ 语言 - 循环

Microsoft Word - C-pgm-ws2010.doc

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

Microsoft PowerPoint - ch09_AEL0080.ppt

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

3.1 num = 3 ch = 'C' 2

Microsoft PowerPoint - C-Ch08.ppt

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

C++ 程式設計

C 語言—陣列及字串

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

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

Microsoft Word - CPE考生使用手冊 docx

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

上海市本科教学质量年度报告

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

FZUBRIDGE

untitled

Microsoft Word - 考试大纲 (2)

Microsoft Word - ACL chapter02-5ed.docx

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

<4D F736F F D20D7DBBACFCAD4CCE231B2CEBFBCB4F0B0B82E646F63>

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

引言

chap07.key

Microsoft PowerPoint - 02 C語言基本概述.ppt

<4D F736F F D20B5DA31D5C220C7B6C8EBCABDD3A6D3C3B3CCD0F2C9E8BCC6D7DBBACFBDCCB3CC2E646F63>

Microsoft PowerPoint - 02 C語言基本概述.ppt

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h

CC213

第八﹑九章 I/O系統

寻医问药指南(十七)


Ps22Pdf

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

1. SDK 概述 Arcsoft Photo Styling SDK 可以将输入图像转化为具有指定风格的图像 图像风格主要是指色调 笔触 线条等图像的特异性表现形式 存储某一艺术图像风格模板的文件将按需要发布给 SDK 使用者 借助 SDK 和风格模板文件, 用户可以开发图像风格化等图像美化类应用

新版 明解C++入門編

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

Microsoft PowerPoint - ds-1.ppt [兼容模式]

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

C程序设计语言

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

untitled

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

第1章

玉山科技AES加密工具程式說明書

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++;

11. 下列关于文件的结论中正确的是 ( ) A. 对文件操作必须先关闭文件 B. 对文件操作必须先打开文件 C. 对文件的操作顺序没有统一规定 D. 以上三种答案全是错误的 12. 若以 a+ 方式打开一个已存在的文件, 则以下叙述正确的是 ( ) A. 文件打开时, 原有文件内容不被删除, 位置

没有幻灯片标题

期中考试试题讲解

White Sketchpad PowerPoint Presentation

1

FY.DOC

2008年4月全国计算机等级考试二级C语言真题(含答案)

Microsoft Word - C語言講義--完整版.doc

上海浦~1

untitled

Searching and Sorting

C Programming

Microsoft PowerPoint - 04-array_pointer.ppt

Microsoft Word - Chap02.doc

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

<4D F736F F D2043D3EFD1D4B3CCD0F2C9E8BCC6CAD4BEEDBCB0B4F0B0B8A3A BCB62D3031A3A92E646F6378>

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

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

e 2 3 2

Microsoft PowerPoint - EmbSys101_Java Basics.ppt [相容模式]

CC213

Transcription:

檔案的輸入 輸出 12-1 輸入 輸出的基礎 理解資料流 (stream) 的概念 在 C 語言中支援各種輸出入功能的概念, 就稱為資料流 執行附加格式的輸入 輸出 printf() 和 scanf() 是用來輸出 輸入的函數 必須先引入 stdio.h 檔案才能使用這些函數 這兩個函數會以固定的格式進行輸出入, 也可以使用各種不同的轉換規格

使用固定格式的輸出 輸入函數之範例 : int main(void) int i; double d; char str[100]; printf(" 請輸入一個整數 \n"); scanf("%d", &i); printf(" 請輸入一個小數 \n"); scanf("%lf", &d); printf(" 請輸入一個字串 \n"); scanf("%s", str); scanf() 函數執行固定格式的輸入 printf() 函數執行固定格式的輸出 printf(" 所輸入的整數為 %d \n", i); printf(" 所輸入的小數為 %lf \n", d); printf(" 所輸入的字串為 %s \n", str);

表 12-1:printf() 函數的轉換規格 轉換規格 內容 %c 以字元輸出 %d 以 10 進制輸出 %f 以浮點小數輸出 %e 以科學記號表示法, 指數部分加上 (e) 之後輸出 %E 以科學記號表示法, 指數部分加上 (E) 之後輸出 %s 以字串輸出 %p 以指標輸出 %o 以 8 進制輸出 %x 以 16 進制 ( 小寫 ) 輸出 %X 以 16 進制 ( 大寫 ) 輸出 %u 以不帶記號的 10 進制輸出

表 12-2:scanf() 函數的轉換規格 轉換規格 內容 %c 以字元輸入 %d 以 10 進制輸入 %f 以浮點小數 (float 型態 ) 輸入 %lf 以浮點小數 (double 型態 ) 輸入 %s 以字串輸入 %p 以指標輸入 %o 以 8 進制輸入 %x 以 16 進制輸入 %u 以不帶記號的 10 進制輸出

指定輸出寬度 要指定輸出寬度的時候, 將數值指定給轉換規格 要指定輸出位置的話, 將 + 或是 - 指定給轉換規格 範例 : int main(void) int i; for (i=1; i<=10; i++) printf("%3d", i); printf("\n"); 以三個字元的寬度間隔輸出 10 進制整數

指定精度 要指定精度的時候, 要在逗點 (.) 的後面指定數值 範例 : int main(void) double num; 以小數點以下三位數輸出 printf(" 請輸入小數 \n"); scanf("%lf", &num); printf(" 如果輸出小數點以下 3 位的話, 就變成 %.3f \n", num); 將轉換規格組合起來 輸出格式的指定之語法 : %± 輸出寬度. 精度格式

以 10 進制以外的方式輸出 用各種表示方法進行輸出之範例 : int main(void) 以 8 進制來輸出 printf(" 如果把 10 用 10 進制來表示的話, 就變成 %d \n", 10); printf(" 如果把 10 用 8 進制來表示的話, 就變成 %o \n", 10); printf(" 如果把 12 用 10 進制來表示的話, 就變成 %o \n", 12); printf(" 如果把 10 用 16 進制來表示的話, 就變成 %x \n", 10); 以 16 進制來輸出 用 10 進制進行輸出的轉換規格為 %d 用 8 進制進行輸出的轉換規格為 %o 用 16 進制進行輸出的轉換規格為 %x

12-2 各種輸出 輸入函數 單行的輸出 輸入 由於使用 scanf() 函數來輸入字串時, 會無法儲存空白的部份, 所以必須使用其他輸入函數 gets() 函數可進行單行輸入 puts() 函數可進行單行輸出 單一字元的輸入 輸出 putchar() 函數可進行單一字元的輸出 getchar() 函數可進行單一字元的輸入

12-3 檔案輸出 輸入的基礎 檔案的機制 檔案操作的步驟為 : 1. 開啟 2. 讀取寫入 3. 關閉

檔案操作的範例 : int main(void) 檔案指標 FILE *fp; fp = fopen("test1.txt", "w"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; else printf(" 檔案開啟 \n"); fclose(fp); printf(" 檔案關閉 \n"); 指定檔案名稱指定開啟模式當無法開啟的時候, 進行錯誤處理將檔案關閉

檔案的開啟和關閉 fopen() 函數 fclose() 函數之語法 : FILE * 檔案指標 = fopen(" 檔案名稱 ", 開啟模式 ); fclose( 檔案指標 ); 開啟模式 意義 "w" 用於寫入使用, 開啟純文字檔案 "r" 用於讀取使用, 開啟純文字檔案 "a" 用於追加寫入使用, 開啟純文字檔案 "w+" 用於更新使用, 開啟純文字檔案 ( 建立新檔案 ) "r+" 用於更新使用, 開啟純文字檔案 ( 開啟檔案 ) "a+" 用於更新 追加寫入使用, 開啟純文字檔案 "wb" 用於寫入使用, 開啟 2 位元檔案 "rb" 用於讀取使用, 開啟 2 位元檔案 "ab" 用於追加寫入使用, 開啟 2 位元檔案

將單一行輸出至檔案 要寫入一行資料到純文字檔案的時候, 要使用 fputs() 函數 範例 : int main(void) FILE *fp; fp = fopen("test1.txt", "w"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; else printf(" 開啟檔案 \n"); fputs("hello!\n", fp); fputs("goodbye!\n", fp); printf(" 寫入至檔案 \n"); fclose(fp); printf(" 關閉檔案 \n"); 輸出至檔案

以固定格式輸出至檔案 要使用指定格式寫入資料至純文字檔案時, 要使用 fprintf() 函數 範例 : #define NUM 5 int main(void) FILE *fp; int test[num]; int i, j; fp = fopen("test2.txt", "w"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; else printf(" 檔案開啟 \n"); printf(" 請輸入 %d 人的成績 \n", NUM); for(i=0; i<num; i++) scanf("%d",&test[i]); for(j=0; j<num; j++) fprintf(fp, "No.%-5d%d\n", j+1, test[j]); printf(" 寫入至檔案 \n"); fclose(fp); printf(" 檔案關閉 \n"); 加上格式之後輸出至檔案中

由檔案輸入一行資料 要從純文字檔案讀取單行資料時, 可以使用 fgets() 函數 範例 : #define NUM 20 int main(void) FILE *fp; char str1[num]; char str2[num]; fp = fopen("test1.txt", "r"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; else printf(" 檔案開啟 \n"); fgets(str1, NUM-1, fp); fgets(str2, NUM-1, fp); printf(" 寫入至檔案的字串為 :\n"); printf("%s", str1); printf("%s", str2); fclose(fp); printf(" 檔案關閉 \n"); 以讀取模式開啟檔案 從指定檔案把最大 NUM-1 個的字元儲存至 str1 來作為字串

輸入大量的資料 如果要從純文字檔案中以固定格式讀取資料的話, 可以使用 fscanf() 函數 範例 : #define NUM 8 int main(void) FILE *fp; int test[num]; int max, min; int i, j; fp = fopen("test3.txt", "r"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; for(i=0; i<num; i++) fscanf(fp, "%d", &test[i]); max = test[0]; min = test[0]; for(j=0; j<num; j++) if(max < test[j]) max = test[j]; if(min > test[j]) min = test[j]; printf("no.%-5d%d\n", j+1, test[j]); printf(" 最高分為 %d \n", max); printf(" 最低分為 %d \n", min); fclose(fp); 求出最高分和最低分

12-4 二進位檔與隨機存取 寫入資料至二進位檔 要寫入指定大小的資料時, 可以使用 fwrite() 函數 fwrite() 函數之語法 : fwrite( 指向寫入資料的指標, 資料大小, 個數, 檔案指標 ); 範例 : #define NUM 5 int main(void) FILE *fp; int test[num] = 80,60,22,50,75; int i; fp = fopen("test1.bin", "wb"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; for(i=0; i<num; i++) fwrite(&test[i], sizeof(int), 1, fp); printf(" 寫入檔案 \n"); fclose(fp); 將二進位檔開啟為寫入模式 將陣列的各元素輸出至檔案

讀取二進位檔 要讀取指定大小的資料, 可以使用 fread() 函數 fread() 函數 fread( 指向讀取範圍的指標, 資料大小, 個數, 檔案指標 ); 範例 : #define NUM 5 int main(void) FILE *fp; int test[num]; int i, j; fp = fopen("test1.bin", "rb"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; for(i=0; i<num; i++) fread(&test[i], sizeof(int), 1, fp); for(j=0; j<num; j++) printf("%d\n", test[j]); fclose(fp); 以讀取模式開啟二進位檔

隨機存取 由檔案的最前面開始依照順序進行讀寫的方法稱之為 循序存取 由檔案的任意地方開始讀寫的方法稱之為 隨機存取 fseek() 函數之語法 : fseek( 檔案指標, 要移動的大小, 開始位置 ); fseek() 函數可以使用的巨集 SEEK_SET 檔案的最前面 SEEK_CUR 現在位置 SEEK_END 檔案的最後

進行隨機存取之範例 : #define NUM 5 int main(void) FILE *fp; int num; int i; fp = fopen("test1.bin", "rb"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; printf(" 要讀取第幾號資料?(1~5)\n"); scanf("%d", &i); fseek(fp, (i-1)*sizeof(int), SEEK_SET); fread(&num, sizeof(int), 1, fp); printf(" 第 %d 號的資料為 %d \n", i, num); fclose(fp); 移動到讀取的位置

12-5 由指令列進行輸入 使用指令列引數 指令列引數之語法 : int main(int argc, char *argv[]) 接受輸入字串的個數 接受輸入的字串 當輸入以下資料時 : Sample1 myfile.txt argc 為 2 argv[0] 為 Sample1 argv[1] 為 myfile.txt

使用指令列引數之範例 : int main(int argc, char *argv[]) FILE *fp; int ch; if(argc!= 2) printf(" 參數的數目不同 \n"); return 1; fp = fopen(argv[1], "r"); if(fp == NULL) printf(" 無法開啟檔案 \n"); return 1; while((ch = fgetc(fp))!= EOF) putchar(ch); fclose(fp); 查詢輸入字串的個數 指定輸入的第二個字串並開啟檔案 將字元逐一讀取出來, 直到檔案的最後

12-6 程式除錯 理解除錯的機制 程式中的錯誤叫做臭蟲 (bug) 除去臭蟲的作業叫做除錯 (debug) 理解附加條件的編譯方式 C 語言的前置處理器可以指定所依照之條件, 來進行程式編譯 這就稱為附加條件的編譯方式 (conditional compilation)

附加條件的編譯方式之範例 : #define DEBUG int main(void) int i; int sum = 0; 定義巨集 當巨集已經定義好的時候 for(i=1; i<=5; i++) #ifdef DEBUG fprintf(stderr, " 變數 sum 的值為 %d \n", sum); #endif sum = i + sum; 編譯這段程式 printf("1~5 為止的合計值為 %d \n", sum);

附加條件的編譯方式 (#ifdef) #ifdef 巨集程式敘述 ; #endif 附加條件的編譯方式 (#ifndef) #ifndef 巨集程式敘述 ; #endif 附加條件的編譯方式 (#if) #if 運算式 1 程式敘述 ; #elif 運算式 2 程式敘述 ; #else 程式敘述 ; #endif 使用內建的巨集 表 12-4: 內建的巨集 巨集名稱 置換的內容 LINE 原始碼檔案的行號 FILE 原始碼檔案的檔案名稱 DATE 原始碼檔案的編譯日期 TIME 原始碼檔案的編譯時間 TIMESTAMP 原始碼檔案的最後更動時間 STDC 如果對應 ANSI C 的話, 則為 1