1、fscanf(*fp,char *format) fprintf()函数用于向指定文件读或者写数据
2、fread(void *buffer,usigned size,unsigned count,FILE *fp);
3、fseek(FILE*fp,long offset,int fromwhere);
4、fgets(str,int size,FILE *fp); 一次从文件中读取一整行数据 fgets()会把每行换行符
作为字符串的一部分也读入到字符数组中,可以调用trim(str)删除字符串str后的换行符
测试数据:
E:\filename.txt
1表示老师
0表示学生
1 cao 12 32 英语系
1 yan 32 789 数学系
1 wagn 32 23 计算机系
0 he 23 324 软件工程专业
0 qi 23 432 计算机技术
说明:此程序利用结构体和联合体(共用体)知识与读写文件结合,意在是读者感受到知识之间的连合性。在学习阶段,要将知识联合起来学,才能更加生动
形象,学习的更加深刻。
*/
#include<stdio.h>
#include<stdlib.h>
union pro{
char department[20];
char classname[20];
};
typedef struct people
{
int id;
char name[20];
int old;
float score;
union pro pos;
}ple;
int readFile(char *filname);
int writeFile(char filename[]);
int main(){
char file[30];
gets(file);
writeFile(file);
// readFile(file);
return 0;
}
int writeFile(char *filename){
FILE *fp;
int i=0;
fp = fopen(filename,"w+");
if(fp == NULL){
printf("file errno!\n");
exit(0);
}
for(i =0;i < 5; i++){
ple s;
scanf("%d",&s.id);
if(s.id == 1){
scanf("%s%d%f%s",s.name,&s.old,&s.score,s.pos.department);
}
else if(s.id == 0){
scanf("%s%d%f%s",s.name,&s.old,&s.score,s.pos.classname);
}
fprintf(fp,"%s%-8s%-3d%-6f",&s.id,s.name,s.old,s.score);
if( s.id ==1){
fprintf(fp,"%-6s\n",s.pos.department);
}else if( s.id == 0){
fprintf(fp,"%-6s\n",s.pos.classname);
}
}
printf("This file has been saved at %s \n",filename);
fclose(fp);
return 0;
}
int readFile(char file[30]){
FILE *fp1;
fp1 = fopen(file,"r");
ple s;
if(fp1 == NULL){
printf("openfile errno!\n");
exit(0);
}
else while(!feof(fp1)){
fscanf(fp1,"%s%d%f",s.name,&s.old,&s.score);
printf("%-6s%3d%-6f\n",s.name,s.old,s.score);
}
fclose(fp1);
return 0;
}
二、利用ungetc(ch,FILE * fp)一次性向数组多次输入数据
#include<stdio.h>
#include<stdlib.h>
int main(){
int s[20];
char c;
int i=0;
while((c=getchar()) != '\n'){
ungetc(c,stdin);
scanf("%d",&s[i]);
i++;
}
for(i = 0; s[i] != '\0' ; i++){
printf("%2d ",s[i]);
}
return 0;
}
诸如结果: