c语言关于文件的相关操作

/*
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;
}

诸如结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值