C语言怎么实现I/O流设计
导读:本文共4906字符,通常情况下阅读需要16分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:这篇“C语言怎么实现I/O流设计”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言怎么实现I/O流设计”文章吧。前言文件的读取和写入是使用的是fscanf和fprintf两个函数,C语言中文件读取的函数不止这两个。文章中采用读取文件的方式有两个,输入行数和使用EOF判断文件末尾。%... ...
目录
(为您整理了一些要点),点击可以直达。这篇“C语言怎么实现I/O流设计”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言怎么实现I/O流设计”文章吧。
前言
文件的读取和写入是使用的是
fscanf
和fprintf
两个函数,C语言中文件读取的函数不止这两个。文章中采用读取文件的方式有两个,输入行数和使用EOF
判断文件末尾。%s
进行读取时不需要使用取址符&
,主要是用于输入字符数组。
一、题目
实验 I/O流设计
一、 实验目的:
熟悉文件流类的使用,掌握文件的打开、读写、关闭操作。
二、 实验时间:
三、 实验地点:
四、 实验内容:
1.输入任意多个学生的数据(学号,姓名,成绩),将数据存放在student.dat文件中,然后从该文件中读出所有数据并显示。
2.编程将2个文件的内容连成一个文件。
3.编写程序,给一个文本文件加上行号后存到另外一个文件中。
五、实验要求:在上机前写出全部源程序;
六、实验结果分析:
二、代码及效果
[1]. 第一问
使用两个文件指针,file1和file2指针分别用于写文件和读取文件,操作的都是student.dat文件。
student.dat文件不需要提前创建
使用了一个结构体数组存储学生的学号、姓名、成绩的信息。
在输入学生数,将学生数作为文件的第一行以便之后的读取
在控制台输入每个学生信息的同时,使用file1指针将当前的学生数据存入文件
需要注意的是存入文件时,不会自动换行,所以需要在信息末尾添加一个换行符
因为读取文件时必须保证文件已存在,所以在关闭file1指针之后才使用fopen函数
之后就是根据第一行的学生个数,读取学生的信息并显示
#include<stdio.h>structstudent{charnumber[20];//学号charname[20];//姓名intscore;//成绩}stu[100];//学生结构体数组intmain(){FILE*file1=fopen("student.dat","w");//文件指针,写FILE*file2;//文件指针,读inti;intnum=0;//学生个数printf("学生个数:");scanf("%d",&num);fprintf(file1,"%d",num);//将学生个数放在文件首行for(inti=0;i<num;i++){//输入学生信息printf("第%d位学生",i+1);printf("学号:");scanf("%s",stu[i].number);//学号printf("姓名:");scanf("%s",stu[i].name);//姓名printf("成绩:");scanf("%d",&stu[i].score);//成绩//存入文件fprintf(file1,"%s%s%d",stu[i].number,stu[i].name,stu[i].score);}fclose(file1);//关闭文件指针file2=fopen("student.dat","r");//读取文件fscanf(file2,"%d",&num);//读取第一行的学生个数//printf("%d",num);for(inti=0;i<num;i++){//显示文件的数据//局部变量charnumber[20];charname[20];intscore;//获取当前行的数据fscanf(file2,"%s",number);fscanf(file2,"%s",name);fscanf(file2,"%d",&score);//打印printf("第%d位学生:%s%s%d",i+1,number,name,score);}fclose(file2);return0;}
[2]. 第二问
刚开始时student1.dat和student2.dat必须已存在,student3.dat是之后合并数据产生的文件不需要提前创建。
先是对student1.dat文件进行读取,存储到结构体数组stu1中
再对student2.dat文件进行读取,存储到结构体数组stu2中
将行数存到student3.dat文件的第一行
然后分别遍历stu1和stu2结构体数组,存入数据
#include<stdio.h>structstudent{charnumber[20];//学号charname[20];//姓名intscore;//成绩}stu1[100],stu2[100];//学生结构体数组intmain(){inti,num1,num2;charfile_name1[20];charfile_name2[20];charfile_name3[20];FILE*file1,*file2,*file3;//文件指针file1=fopen("student1.dat","r");//读取文件1file2=fopen("student2.dat","r");//读取文件2file3=fopen("student3.dat","w");//写入文件3//获取文件1内容fscanf(file1,"%d",&num1);//读取第一行的学生个数for(inti=0;i<num1;i++){fscanf(file1,"%s",stu1[i].number);fscanf(file1,"%s",stu1[i].name);fscanf(file1,"%d",&stu1[i].score);//printf("第%d位学生:%s%s%d",i+1,stu1[i].number,stu1[i].name,stu1[i].score);}//获取文件2内容fscanf(file2,"%d",&num2);//读取第一行的学生个数for(inti=0;i<num2;i++){fscanf(file2,"%s",stu2[i].number);fscanf(file2,"%s",stu2[i].name);fscanf(file2,"%d",&stu2[i].score);//printf("第%d位学生:%s%s%d",i+1,stu2[i].number,stu2[i].name,stu2[i].score);}//写入文件3fprintf(file3,"%d",num1+num2);for(inti=0;i<num1;i++){//遍历stu1数组fprintf(file3,"%s%s%d",stu1[i].number,stu1[i].name,stu1[i].score);}for(inti=0;i<num1;i++){//遍历stu2数组fprintf(file3,"%s%s%d",stu2[i].number,stu2[i].name,stu2[i].score);}//printf("已将student1.dat和student2.dat内容存入student3.dat");printf("复制成功!");fclose(file1);fclose(file2);fclose(file3);return;}
[3]. 第三问
EOF是文件结束的标志,即End OF File,如果你读取到的字符串等于EOF就表示读取到了文件的末尾,就可以退出遍历读取的操作。
使用到了strcpy()函数用于复制字符数组的内容到另一个字符数组,第一个参数表示的是目标字符数组,第二个参数是需要复制原字符数组。
使用了死循环对文件进行遍历,使用一个局部的字符数组str存储当前行数据
当执行了if语句后,会做两件事,一是将当前行数据存储到str数组,二是判断是否读取到文件末尾
当读取结束就提示,并break出死循环。
否则就将str字符数组复制给结构体数组t的下标为num的str字符数组中。
然后下标num自加,之后对结构体数组t的遍历范围就是[0, num)
遍历结构体数组,同时对文件stu2.dat文件进行写入的操作。
由于下标是从0开始的,所以行数就等于i+1
#include<stdio.h>#include<string.h>structtext{charstr[100];//字符数组,存储每行的数据}t[100];//结构体数组intmain(){FILE*file1=fopen("stu1.dat","r");//文件指针,读FILE*file2=fopen("stu2.dat","w");//文件指针,写inti,num=0;//读while(1){//遍历文件stu1.datcharstr[100];if(fscanf(file1,"%s",str)==EOF){//若读取到最后一行时printf("文件读取结束!");break;}else{strcpy(t[num].str,str);//将字符数组复制到结构体数组num++;//定位到下一个结构体}}//写入文件for(inti=0;i<num;i++){//遍历结构数组t//printf("%s",t[i].str);fprintf(file2,"%d%s",i+1,t[i].str);}fclose(file1);fclose(file2);return0;}
以上就是关于“C语言怎么实现I/O流设计”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
C语言怎么实现I/O流设计的详细内容,希望对您有所帮助,信息来源于网络。