標準常用IO函式庫

常常資料要輸出輸入的,如果對於函式不熟的話又要常常去翻書查,這邊介紹最常用的檔案處理函式和基本輸出入函式,還有函式的使用範例。

※ 檔案輸出入函式

* FILE* fopen(const char* filename, const char* mode) 開啟檔案
* mode: r, w, a, r+, w+, a+, rb, wb, ab
* 成功回傳檔案指標FILE* stream
* 失敗回傳NULL

Example:

FILE* fp;
if (!(fp = fopen("data.txt", "r")))
{
puts("file open error");
exit(1);
}

* int fclose(FILE* stream) 關閉檔案
* 成功回傳0
* 失敗回傳EOF

Example:

if (fclose(fp))
{
puts("close file error");
exit(1);
}

* int fgetc(FILE* stream) 從檔案中取得一個字元
* 成功回傳字元
* 失敗回傳EOF

Example:

char ch;
while ((ch = fgetc(fp)) != EOF)
{
putchar(toupper(ch));
}

* int fputc(int ch, FILE* stream) 輸出一個字元到檔案中

Example:

char ch;
while ((ch = getchar()) != EOF)
{
fputc(ch, fp);
}

* int fscanf(FILE* stream, const char* format, ...) 格式化從檔案讀入
* 成功回傳讀到的個數
* 失敗回傳EOF

Example:

while (fscanf(fp, "%d%s%d", &id, name, &score) == 3)
{
printf("id: %d name: %s score: %d\n", id, name, score);
}

* int ungetc(int ch, FILE* stream) 把已取出來的字元塞回去stream中

Example:

char ch;
while ((ch = getchar()) != EOF)
{
if (ch == 'b' || ch == 'd')
{
ungetc(ch);
}
}

* int fprintf(FILE* stream, const char* format, ...) 格式化輸出到檔案

Example:

const char* str = "test1";
fprintf(fp, "%s\n", str);

* char* fgets(char* str, int num, FILE* stream) 從檔案中一次讀取一行
* 成功回傳str
* 失敗回傳NULL

Example:

char buf[80];
while (fgets(buf, sizeof(buf), fp))
{
puts(buf);
}

* int fputs(const char* str, FILE* stream) 一次寫入一行到檔案之中
* 不會加上換行符號

Example:

const char* str = "test";
fputs(str, fp);

* int fread(void* buffer, size_t size, size_t num, FILE* stream) 二元讀檔
* 成功回傳讀取到的個數
* 失敗回傳0 (讀取0個)

Example:

int count;
double buffer[10];
while ((count = fread(buffer, sizeof(*buffer), 10, fp)))
{
printf("file readed count: %d\n", count);
}

* int fwrite(void* buffer, size_t size, size_t num, FILE* stream) 二元寫檔
* 成功回傳寫入的個數
* 失敗回傳0 (寫入0個)

Example:

int buffer[80];
int success;
if ((success = fwrite(buffer, sizeof(*buffer), 80, fp)))
{
printf("write success count: %d\n", success);
}

* int fseek(FILE* stream, long offset, int flag) 移動檔案指標
* flag: SEEK_SET, SEEK_CUR, SEEK_END
* void rewind(FILE* stream) 移動檔案指標到檔案起始處
* long ftell(FILE* stream) 回傳目前檔案位子(可計算檔案大小)

Example:

long file_size;
fseek(fp, 0, SEEK_END);
file_size = ftell(fp);
rewind(fp);

* int fflush(FILE* stream) 清除緩衝區將緩衝區寫入檔案

Example:

fflush(stdout);
fflush(fp);

* void perror(const char* str) 印出開讀檔案時的錯誤資訊

Example:

FILE* fp;
if (!(fp = fopen("data.txt", "r")))
{
const char* str = "Error message with data.txt";
perror(str);
exit(1);
}

※ 標準輸出入函式

* int getchar(void) 從stdin讀取一個字元
* 成功回傳字元
* 失敗回傳EOF

Example:

char ch;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}

* int putchar(int ch) 輸出一個字元到stdout

Example:

char ch = 'a';
putchar(ch);

* int scanf(const char* format, ...) 格式化從stdin讀取資料
* int printf(const char* format, ...) 輸出格式資料到stdout中

※ 字元字陣輸出入函式

* int sscanf(const char* buffer, const char* format, ...) 從buffer中格式化讀取資

Example:

char buffer[80]
while (fgets(buffer, sizeof(buffer), stdin))
{
int id;
char name[20];
sscanf(buffer, "%d%s", &id, name);
}

* int sprintf(char* buffer, const char* format, ...) 將格式化的資料寫入buffer中

Example:

char buffer[80];
sprintf(buffer, "%.2f", 449.382);
puts(buffer);

0 意見: