一看就会的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 
#include
#include
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 for(j=0;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 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;
}
一看就会的C语言笔记——文件操作

运行结果,按照名字进行了排序。


分享到:


相關文章: