零基礎入門學習C語言012講:文件操作(2)

上一節的課後作業:

作業: 寫一個load()函數將該文件讀取並顯示出來! 聰明如你,認真思考一定能做到的! 

#include <stdio.h>

#define SIZE 4

struct student
{
	char name[10];
	int num;
	int age;
	char addr[15];
}stu[SIZE];

void load();

void main()
{
	int i;

	load();
	printf("      name   num   age     address\n\n");
	for (i = 0; i < SIZE; i++)
	{
		printf("%10s %5d %5d %10s\n", stu[i].name, stu[i].num, stu[i].age, stu[i].addr);
	}
}

// 作業: 寫一個load()函數將該文件讀取並顯示出來! 聰明如你,認真思考一定能做到的! 
void load()
{
	FILE *fp;
	int i;

	if (!(fp = fopen("student-list", "r")))
	{
		printf("Cannot open the file!\n");
		return;
	}

	for (i = 0; i < SIZE; i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);
	}
	fclose(fp);
}

三.格式化讀寫函數(fprintf()和fscanf())

函數調用:

fprintf ( 文件指針,格式字符串,輸出表列);

fscanf  ( 文件指針,格式字符串,輸入表列);

函數功能:

從磁盤文件中按格式讀入或輸出字符。

例如:

fprintf(fp, "%d,%6.2f", i, t);

fscanf (fp, "%d,%f", &i, &t);

順序讀寫和隨機讀寫

順序讀寫:

位置指針按字節位置順序移動。

 

隨機讀寫:

讀寫完上一個字符(字節)後,並不一定要

讀寫其後續的字符(字節),而可以讀些文

件中任意位置上所需要的字符(字節)。

fseek函數(一般用於二進制文件)

函數功能:

改變文件的位置指針

函數調用形式:

fseek(文件類型指針,位移量,起始點)

起始點:

文件開頭           SEEK_SET      0

文件當前位置     SEEK_CUR     1

文件末尾           SEEK_END     2

位移量:以起始點爲基點,向前移動的字節數。

fseek函數應用舉例

fseek(fp,100L,0);

將位置指針移到離文件頭100個字節處

fseek(fp,50L, 1);

將位置指針移到離當前位置50個字節處

fseek(fp,50L, 2);

將位置指針從文件末尾處向後退10個字節

fseek(fp,i*sizeof(struct stu),0);

將位置指針移到離文件頭i*sizeof(struct stu)這個距離處。

舉例論證

例子:

在學生文件student-list中讀出第二個學生的數據。

#include <stdio.h>
#include <stdlib.h>

struct student
{
	char name[10];
	int num;
	int age;
	char addr[15];
}boy;

void main()
{
	FILE *fp;

	int i = 1;      // 用於定位第 i 個結構

	if (!(fp = fopen("student-list", "r")))
	{
		printf("Cannot open the file!\n");
		return;
	}

	rewind(fp);  //重置文件頭
	fseek(fp, i*sizeof(struct student), 0);  //定位要讀取的位置
	fread(&boy, sizeof(struct student), 1, fp);  //讀取

	printf("name\tnumber      age     addr\n");
	printf("%s\t%5d  %7d      %s\n", boy.name, boy.num, boy.age, boy.addr);

	system("pause");
}

ftell函數

函數作用:

得到流式文件中的當前位置,用相對於文件開

頭的位移量來表示。

返回值:

返回當前位置,出錯時返回-1L。

應用舉例:

i = ftell(fp);

if(i == -1L)  printf(“error\n”);

出錯的檢測

ferror函數

調用形式:

ferror(fp);

返回值:

返回0,表示未出錯;返回非0,表示出錯。

注意:

在調用一個輸入輸出函數後立即檢查ferror函

數的值,否則信息會丟失。在執行fopen函數

時,ferror函數的初始值自動置爲0。

clearerr函數

調用形式:

clearerr(fp);

函數作用:

使文件錯誤標誌和文件結束標誌置爲0。

只要出現錯誤標誌,就一直保留,直到對同一文件調用clearerr函數或rewind函數,或任何其他一個輸入輸出函數。

文件操作小結

分類

函數名

功能

打開文件

fopen()

打開文件

關閉文件

fclose()

關閉文件

文件定位

fseek()

改變文件位置指針的位置

 

rewind()

使文件位置指針重新至於文件開頭

 

 ftell()

返回文件位置指針的當前值

文件狀態

feof()

若到文件末尾,函數值爲真

 

ferror()

若對文件操作出錯,函數值爲真

 

clearerr()

使ferror和feof()函數值置零

文件讀寫

fgetc(),getc()

指定文件取得一個字符         

 

fputc(),putc()

字符輸出到指定文件

 

fgets()

指定文件讀取字符串

 

fputs()

字符串輸出到指定文件

 

getw()

指定文件讀取一個字(int型)

 

putw()

一個字輸出到指定文件

 

fread()

指定文件中讀取數據項

 

fwrite()

數據項寫到指定文件中

 

fscanf()

指定文件按格式輸入數據

 

fprintf()

指定格式將數據寫到指定文件中

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章