一看就會的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語言筆記——文件操作

運行結果,按照名字進行了排序。


分享到:


相關文章: