四时宝库

程序员的知识宝库

一看就会的C语言笔记——文件操作

/*

函数作用及解释。

fopen:

FILE* fopen(const char *filename,const char *mode)

filename-要打开的文件名,mode-文件访问模式

"r"只读,

"w"创建一个用于写入的空文件,如果文件名称与已经存在的文件相同,则会删除已有的文件的内容,

文件被视为一个新的空文件。

"a"追加到一个文件,写操作向文件末尾追加数据,如果文件不存在,则创建文件。

"r+"打开一个用于更新的文件,可读取也可写入,该文件必须存在。

"w+"创建一个用于读写的空文件。

"a+"打开一个用于读取和追加的文件。

返回值为一个FILE指针。否则返回NULL,且设置全局变量errno来标识错误。

fscanf:分局数据格式从输入流(stream)中写入数据(argument);

返回值,整型,成功返回读入的参数的个数,失败返回EOF(-1);

fgets:fscanf遇到空格和换行时结束,fgets遇到空格不结束。

fclose:关闭流stream,刷新所有的缓冲区。如果流关闭成功,则该方法返回零。如果失败,则返回EOF。

perror(const char *str):把一个描述性错误消息输出到stderr。输出str:错误类型.

**counter.txt

1001 ewa 30 234560

1002 rose 31 3234546

1003 joe 24 325256

1004 jack 39 5412545

*/

示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct User{
	int usercounter;
	char username[24];
	int age;
	int money;
}user_t; //类型别名
int loadUser(user_t user[])//载入函数,参数为user_t类型的结构体指针
{
	FILE* fp = fopen("counter.txt","r");//以只读的方式打开文件
	if(fp == NULL){
		perror("打开失败");
		exit(1);
	}
	int i = 0;
	while(fscanf(fp,"%d %s %d %d",&user[i].usercounter,&user[i].username,&user[i].age,
		&user[i].money)>0){
		i++;
	}
	fclose(fp);
	return i;
}
void sortUser(user_t user[],int len)//按姓名排序
{
	int i=0,j=0;
	for(i=0;i<len;i++){
		for(j=0;j<len-i-1;j++){
			if(strcmp(user[j].username,user[j+1].username)>0){
				user_t tmp =user[j];
				user[j]=user[j+1];
				user[j+1]=tmp;
			}
		}
	}
	return;
}
void printUser(user_t user[],int len)//打印所有人员信息
{
	int i = 0;
	for(i=0;i<len;i++){
		printf("counter:%d name:%s age:%d money:%d\n",user[i].usercounter,user[i].username,user[i].age,user[i].money);
	}
}
int main(void)
{
	user_t user[24];
	memset(user,0,sizeof(user));
	int len = loadUser(user);
	sortUser(user,len);
	printUser(user,len);
	return 0;
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接