c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...
1.文件中存储的学生信息按照班级编号升序排列,每个班级的人数可以不同,要求读取文件中所有学生的成绩,计算每个班级的平均成绩,将班级编号和平均成绩输出。
存储格式:
145811 fuxin 100
145811 chengxian 90
145812 zhangxue 92
145812 lijun 88
145813 ha 100
145813 hd 300
145813 hf 200
#include
#include
int main()
{
int num=0; //班级人数计数
int sumScore =0; //累计成绩
int curClass=0; //当前班级
int curScore=0; //当前成绩
int lastClass=0; //上一个班级
int readItems=0; //正确读入数据数目
FILE *fin; //输入文件
fin=fopen("score.dic","r");
if(!fin) //文件打开失败
{
fprintf(stderr,"error open file!"); //输出错误信息到标准输出
exit(-1); //强制退出,并返回错误码
}
lastClass=0;
char s[100];
while((readItems=fscanf(fin,"%d %*s %d",&curClass,&curScore))!=EOF) //*表示跳过
{
if(readItems!=2)
break;
if(lastClass==curClass||lastClass==0)
{
num++;
sumScore +=curScore;
lastClass=curClass;
}
else
{
if(num==0)
return 0;
printf("%d\t%d\n",lastClass,sumScore/num);
sumScore=curScore;
lastClass=curClass;
num=1;
}
}
printf("%d\t%d\n",lastClass,sumScore/num);
fclose(fin);
}
2.用fgetc函数从键盘逐个输入字符,然后用fputc函数写到磁盘文件即可
#include
#include
int main()
{
FILE *fp;
char ch;
if((fp=fopen("file.dat","w"))==NULL)
{
printf("error open file");
exit(1);
}
printf("请输入字符串,以#结束:\n");
while((ch=getchar())!='#')
{
fputc(ch,fp);
putchar(ch); //在屏幕上显示字符
}
fclose(fp);
putchar(10); //向屏幕输出一个换行符
return 0;
}
3.将一个磁盘文件中的信息复制到另一个磁盘文件中
int main()
{
FILE *fin,*fout;
int ch;
fin=fopen("fin.dat","r");
fout=fopen("fout.dat","w");
if(fin==NULL||fout==NULL)
{
fprintf(stdin,"error open files");
}
while((ch=fgetc(fin))!=EOF) //注意ch是int类型
fputc(ch,fout);
fclose(fin);
fclose(fout);
printf("复制文件成功");
return 0;
}
如果使用feof()函数判断是否到达文件末尾,需要注意先读取再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断。因为在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多执行了一次。
//错误,多输出一行FF
while(!feof(fp))
{
c = fgetc(fp);
printf("%X\n",c);
}
//正确
c = fgetc(fp);
while(!feof(fp))
{
printf("%X\n",c);
c = fgetc(fp);
}
4 从键盘读入若干字符,对它们按照字母大小排序,然后把排好序的字符串送到磁盘文件保存
#define MAXSIZE 1000
int main()
{
FILE *fp;
char str[MAXSIZE];
int ch;
int i;//字符个数
if((fp=fopen("file.dat","w"))==NULL)
{
printf("error open file");
exit(1);
}
i=0;
//从键盘获取数据
while((ch=getchar())!=EOF)
{
if(i==(MAXSIZE))
{
if(fputs(str,fp)==EOF)//向文件输入数据
{
printf("error output to file");
exit(1);
}
i=0;
}
//插入排序
if(i==0)
{
str[i]=ch;
}
else
{
int j;
for(j=i-1;j>=0&& ch
{
str[j+1]=str[j];
}
str[j+1]=ch;
}
i++;
}
if(i>0)
fputs(str,fp);
fclose(fp);
return 0;
}
5 从键盘读入若干字符串,对它们按照字母大小排序,然后把排好序的字符串送到磁盘文件保存
#include
#include
#include
#define MAXLINES 100 //最大行数
#define MAXLEN 1000 //一行最大长度
char *lineptr[MAXLINES]; //指向字符串的指针数组
//返回长度
int getline(char*s,int lim)
{
int c;
char *t=s;
while(--lim>0&&(c=getchar())!=EOF &&c!='\n')
*s++=c;
if(c =='\n')
*s++=c;
*s='\0';
return s-t;
}
int readlines(char *lineptr[],int maxlines)
{
int len,nlines;
char *p,line[MAXLINES];
nlines=0;
while((len=getline(line,MAXLEN))>0)
if(nlines>=maxlines ||(p=(char*)malloc(sizeof(len)))==NULL)
return -1;
else
{
line[len-1]='\0';
strcpy(p,line);
lineptr[nlines++]=p;
}
return nlines;
}
void writeline(char*lineptr[],int nlines,FILE *fp)
{
while(nlines-->0)
{
printf("%s\n",*lineptr);
fputs(*lineptr++,fp);
fputs("\n",fp);//输入换行符
}
}
void swap(char *v[],int i,int j)
{
char *temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
void qsort(char *v[],int left,int right)
{
int i,last;
if(left>right)
return;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;i<=right;i++)
if(strcmp(v[i],v[left])<0)
swap(v,++last,i);
swap(v,left,last);
qsort(v,left,last-1);
qsort(v,last+1,right);
}
int main()
{
FILE *fp;
if((fp=fopen("file.dat","w"))==NULL)
{
printf("error open file");
exit(1);
}
printf("Enter strings:\n");
int nlines;//读取行数
if((nlines=readlines(lineptr,MAXLINES))>0)
{
qsort(lineptr,0,nlines-1);
writeline(lineptr,nlines,fp);
}
else
{
printf("error input");
}
fclose(fp);
}
6 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去
#define SIZE 10
struct Student_type{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE]; //全局结构体数组
void save()
{
FILE*fp;
int i,j;
if((fp=fopen("student.dat","wb"))==NULL)
{
printf("error open file\n");
exit(1);
}
for(i=0;i
{
if((j=fwrite(&stud[i],sizeof(struct Student_type),1,fp))!=1)
printf("file write error\n");
}
fclose(fp);
}
void read()
{
FILE *fp;
if((fp=fopen("student.dat","rb"))==NULL)
{
printf("erroe open file");
exit(1);
}
for(int i=0;i
{
fread(&stud[i],sizeof(struct Student_type),1,fp);
printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp);
}
int main()
{
int i;
printf("Please enter data of students:\n");
for(i=0;i
{
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
}
save();
read();
return 0;
}
7 有一个磁盘文件,内有一些信息。要求第一次将它的内容显示在屏幕上,第2次把它复制到另一个文件上
void rewind(FILE *stream)
设置文件位置为给定流stream的文件的开头
int main()
{
FILE *fp1,*fp2;
fp1=fopen("fin.dat","r");
fp2=fopen("fout.dat","w");
if(!fp1||!fp2)
{
printf("error open file");
exit(1);
}
while(!feof(fp1))
{
putchar(getc(fp1));
}
putchar(10);//换行
rewind(fp1);//使文件位置标记返回文件头
while(!feof(fp1))
{
putc(getc(fp1),fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
8 在磁盘文件上存有10个学生的数据区的开头,从磁盘文件读入相应学生的信息,并把它显示在屏幕上
#define SIZE 10
struct Student_type{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
int main()
{
int i;
FILE *fp;
if((fp=fopen("student.dat","rb"))==NULL)
{
printf("error open file");
exit(1);
}
for(i=0;i
{
fseek(fp,i*sizeof(struct Student_type),0);
fread(&stud[i],sizeof(struct Student_type),1,fp);
printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp);
return 0;
}
9 有两个磁盘文件,各存放一行字母,今要求把这两个文件中的信息合并(按照字母顺序排列),输出到一个新文件中
int main()
{
FILE *fp1,*fp2,*fp3;
fp1=fopen("fin.dat","r");
fp2=fopen("fout.dat","r");
fp3=fopen("file.dat","w");
if(!fp1||!fp2||!fp3)
{
printf("error open file");
exit(1);
}
char c[1000];//存储数据
int i,j,k,ch;
puts("fileA:");
for(i=0;(ch=getc(fp1))!=EOF&&ch!='\n';i++)
{
c[i]=ch;
putchar(c[i]);
}
puts("\nfileB:");
for(;(ch=getc(fp2))!=EOF&&ch!='\n';i++)
{
c[i]=ch;
putchar(c[i]);
}
for(j=0;j
for(k=0;k
if(c[k]>c[k+1])
{
int temp=c[k];
c[k]=c[k+1];
c[k+1]=temp;
}
puts("\nfileC:");
for(j=0;j
{
putc(c[j],fp3);
putchar(c[j]);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
10 两个班的成绩分别存放在两个班的成绩分别存放在两个文件当中。 每个文件有多行, 每行都是由空格分隔的学号、姓名和成绩。现在要将两个班的成绩合并到一起进行排序按照成绩从高到低,如果相同则按学号由小到大排序。将结果输出一个文件当中。两个输入文件名与输出文件名使用命令行参数指定。请你编写一个程序完成上述功能
#include
#include
#include
#define MAXN 200
struct stuNode
{
char stuID[20];
char name[20];
int score;
};
typedef struct stuNode stuType;
int myCompare(stuType m,stuType n)
{
if(m.score!=n.score)
return n.score-m.score;
else
return strcmp(m.stuID,n.stuID);
}
int cmp(const void *a,const void *b)
{
stuType m=*(stuType*)a, n=*(stuType*)b;
return myCompare(m,n);
}
void loadData(FILE* fp,stuType *m)
{
int i=0;
while(fscanf(fp,"%s",m[i].stuID)!=EOF)
{
fscanf(fp,"%s%d",m[i].name,&m[i].score);
i++;
}
qsort(m,i,sizeof(stuType),cmp);
m[i].score=-1; // set -1 as bounder
}
void merge(stuType *a,stuType *b)
{
stuType tmp[MAXN];
int i=0,j=0,index=0;
while(a[i].score>0 && b[j].score>0)
{
if(myCompare(a[i],b[j])<0)
tmp[index++]=a[i++];
else
tmp[index++]=b[j++];
}
while(a[i].score>0)
tmp[index++]=a[i++];
while(a[i].score>0)
tmp[index++]=b[j++];
tmp[index].score=-1;
for(i=0;i
a[i]=tmp[i];
}
int main(int argc,char* argv[])
{
stuType a[MAXN],b[MAXN];
FILE *fin1,*fin2,*fout;
int i;
fin1=fopen(argv[1],"r");
fin2=fopen(argv[2],"r");
fout=fopen(argv[3],"w");
if(!fin1||!fin2||!fin3)
{
printf("error open file");
exit(1);
}
loadData(fin1,a);
loadData(fin2,b);
merge(a,b);
for(i=0;a[i].score>0;i++)
{
fprintf(fout,"%s %s %d\n",a[i].stuID,a[i].name,a[i].score);
}
return 0;
}
c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...相关推荐
- c语言 指针 字符串 回文 strcmp,【查找字符串面试题】面试问题:C语言指针题集… - 看准网...
1. 若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(). A. p=q; B. *p=*q; C. a=*q; ...
- js 跳转到指定位置 高德地图_【高德字符串JavaScript面试题】面试问题:高德地图Js … - 看准网...
申请JSAPI的开发者key 申请地址:http://lbs.amap.com/dev/key 引入高德地图JavaScript API文件: 创建地图容器 在页面body里你想展示地图的地方创建一个 ...
- 单片机红外线c语言,自己写的51单片机的红外线遥控接收程序(C语言)
自己写的51单片机的红外线遥控接收程序(C语言) (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 //51单片机做的红外遥控实验(C ...
- c语言字符串数组分配没错,【字符串数组面试题】面试问题:C语言基础小结… - 看准网...
26. 位段:指定结构体中成员变量所占的位数(以位的形式紧凑存储) unsigned char/int aaa:1 这里只能是unsigned char/int类型 27. 指针数组:int *p[1 ...
- C语言 编程判断花瓶是谁打碎的,【数组编程面试题】面试问题:C语言解决是谁… - 看准网...
逛贴吧偶遇一道很新颖的C语言编程题,想到自己的C语言荒废了很久,便决定花点时间解决一下练练手. 具体题目如下: 实验题目(4)[见实验教材实验五的题目6]:编写程序exp5_6.c,请判断花瓶是谁打碎 ...
- 贪吃蛇项目面试C语言,【游戏数组面试题】面试问题:C语言贪吃蛇(… - 看准网...
// 贪吃蛇.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #include #include "iostream& ...
- c语言 万年历问题,【数组函数面试题】面试问题:万年历的C语言… - 看准网
万年历_源码 主函数所在源码 #include #include #include int GetWeek(int year,int month,int day);//求今天是周几.周四就返回 4 . ...
- c语言怎么使用数组播放下一首音乐,【数组编程面试题】面试问题:c语言MP3播… - 看准网...
#include #include #include #include //CString的头文件 #include//使用当前时钟做种子 #include #include #include #pr ...
- 贪吃蛇项目面试C语言,【游戏数组面试题】面试问题:c语言版贪吃蛇… - 看准网...
主要运用了光标的移动-.- 教程会在一个月内发布-.-最近考试好多...... 看代码应该能看懂.... 3.1 规则模块与动画模块 1)函数原型:void gui( );void dong( ); ...
最新文章
- 原生js实现preAll和nextAll方法
- C#控件及常用属性整理
- ssm mysql增删改查_SSM配置并实现简单的数据库增删改查操作
- (转)ATOM介绍和使用
- java中到底有没有指针?
- qcc3020定制、qcc3020软件开发tws耳机的注意事项
- 什么是WebSockets!?
- 家庭服务器搭建,NAS存储
- 利用互斥量实现进程间同步
- 【运维面试】面试官: 你每天在公司都做啥?
- 手机如何开启微信定位服务器,微信怎么定位对方的手机所在位置(偷偷定位微信好友位置)...
- 网站快速排名百度首页搜索前十名
- 51单片机hc-sr04超声波模块控制的c语言编程,基于STM32单片机对HCSR04超声波的控制...
- c语言炉石传说算法设计,CCF-CSP题解 201609-3 炉石传说
- 宠物功能[置顶] QQ宠物保姆
- 怎样用计算机设置隐私空间,华为手机的三种隐私设置,开放的秘密空间,永远不用担心女友检查手机!...
- 借助GitHub pages搭建静态个人网站并绑定域名
- [心情]How to Be a Happier Person
- 编写第一个c语言程序
- UIImagePickerController 选照片 拍照 录视频
热门文章
- NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)
- 字符串常量在内存中的存放位置由系统自动安排。_C++核心编程--内存分区模型...
- 搜索引擎登录工具_“搜索引擎营销”有多重要!你知道吗?
- python代码中怎么增加数据_python 实现数据库中数据添加、查询与更新的示例代码...
- python自动化开发和全栈开发_python全栈开发devops运维自动化方向初到高级在线课程分享...
- Python制作词云图根据蒙板图像确定形状和文字颜色
- docker -v 文件夹下没有数据_微服务就是Dubbo?并没有那么简单!微服务架构+Docker+k8s了解下...
- 面试中死锁的考点总结(死锁的定义、产生原因、四个必要条件、如何预防)
- 【数据结构----笔记5】插入排序算法之【希尔排序算法】
- ssd颗粒查看工具_SSD又降价了,但是使用前一定要做这几件事