【输入学生信息,将信息保存于文件里,还有涉及一点点的进度条】
主要是一些进度条的相关代码
文章写的简单,专针对小白了解!
大家好,我是辰梦!
在这里我主要向大家介绍几个函数,如fscanf();fprintf();…
笔者的写作水平较低,可能会写的不够精彩!在这里,还是以代码居多,话不多说,进入我们的第一个代码环节——进度条。这也是看了其他大佬的文章,原处在这里:
这里有原网站,点击这里文章在这里
这里我也贴下我自己改的代码,算是大同小异,可以说是一模一样。
int i,num = 1;
const char* pic = "|/-\\";//简单的动画特效
printf("等待中......\n");//输入提示
while(1)
{
if(101 == num)//当进度条达到101的时候,进度条已满,说明可以跳出循环了
{
printf("\n加载成功!!\n");//提示加载成功
break;//退出循环
}
printf("[");//进度条开始
for(i = 0;i < num/10;i++)//到达 10% 就加个*
{
printf("*");//输入*号
}
printf("]");//进度条结束
printf("%d%%...%c\r",num++,pic[num%4]);//\r为回车符,不加\r会导致出现进度条不好看,记住d后面是它的百分符号%(别记错啦) num%4其中4代表有四个动画特效,分为|、/、-、\。
fflush(stdout);//清空标准输出缓存区中多余的数据
Sleep(200);//这里通过修改睡眠时间来控制进度条更新的速度
}
哈哈,这只是开头,还没到我们本章节的内容。这里我将介绍一下我们即将用到的几个函数:
1)fscanf函数:
fscanf函数只能够从文本文件当中按格式输入,和scanf函数相似,只不过输入的对象是磁盘上的文本文件的数据。
调用形式为:
fscanf(文件指针,格式控制字符串,输入项表)
例如:fscanf(fp,"%d%d",&a,&b);
例如 : fscanf(stdin,"%d%d",&a,&b);
等价于scanf("%d%d",&a,&b);
2)fprintf函数
fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCLL代码形式输出到文本文件中。fprintf函数和printf函数相似,只是将输出的内容按格式存放到磁盘的文本文件中。
调用格式为:
fprintf(文件指针,格式控制字符串,输入项表)
如:fprintf(fp,"%d%d",x,y);
fprintf(stdout,"%d%d",x,y);
等价于printf("%d%d",x,y);
了解了相关的知识点之后,就是令我们兴奋的编代码时刻了!
在这里,你要学会用头文件,如#include
首先我先以学生管理系统为例:
代码如下:
struct student{//定义struct结构体类型
int num;//学号
char name[20];//学生名字
float Clanguage;//学生成绩
float math;//学生成绩
float chinese;//学生成绩
float ave;//三门课程的平均值,计算
}stu[20];
在其中我们可以看到被定义了关于学生的多种信息:学生的学号、学生的姓名、学生各科成绩及其他们的成绩平均值!
其实,输入信息保存于文件当中只要学会之前的fprintf()函数、fscanf()函数就没那么复杂,所以为了这篇文章不显得单调,这里浅谈一些关于学生管理系统的知识。
来来,直接见代码块!!
输入学生信息,详见如下:
for(i = 0; i < n;i++)
{//在终端屏上输入学生信息
printf("学生信息:学号\t姓名\tC语言成绩\t数学成绩\t语文成绩\n");
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].Clanguage,&stu[i].math,&stu[i].chinese);
stu[i].ave=(stu[i].Clanguage+stu[i].math+stu[i].chinese)/3.0;
}
这是输入学生信息的,想见输出学生信息的吗?
输出学生信息到终端屏的其实有两种办法:
为了增加文章字数,我就把两种方法的代码给打出来!
看好了:
这是第一种!
for(i = 0; i < n;i++)
{//终端屏上输出学生信息
printf("____________________________________________________________________________________________________\n");
printf("| 报告 |\n");
printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
printf("| 学号 | 姓名 | C 语言 | 数学 成绩 | 语文 成绩 | 平均分 |\n");
printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
printf("|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
printf("|___________________________________________________________________________________________________|\n\n");
// printf("输出学生信息:学号\t姓名\t语文成绩\t数学成绩\tC语言成绩\n");
// printf(" %d\t%s\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
}
这是第二种!!
//运用另外一种方法,将学生信息打到终端屏上
//实现原理:将输入到文件的内容,依次从文件读取到终端屏
char str[100];//定义字符串
FILE *fp;
fp = fopen("d:\\学习资料\\c语言\\student01.txt","r");
while(fgets(str,100,fp) != 0)//运用fgets函数,实现读取文件的功能
{
printf("%s",str);//输出文件中的内容
}
好了,这就是两种办法!
要想学好C语言,多去掌握一些函数吧,别老抱着scanf()、printf()啃,从我们选择代码的这一条路的时候,我们时刻都要学习,学习新的技术,笔者也在努力的去学习C语言的更多内容,偷偷告诉你们,我在学习C语言的图形库,就是EasyXC语言插件,有人学吗?
网上有很多的,当然你们也可以在评论中求插件链接。
忘了说了,还有输出到文件的代码块
看这里!
for(i = 0; i < n;i++)
{//打印学生信息到指定文件,即所打开的文件地址
// fprintf(fp,"____________________________________________________________________________________________________\n");
// fprintf(fp,"| 报告 |\n");
// fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
fprintf(fp,"| 学号 | 姓名 | C 语言 | 数学 成绩 | 语文 成绩 | 平均分 |\n");
// fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
fprintf(fp,"|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
// fprintf(fp,"|___________________________________________________________________________________________________|\n\n");
// fprintf(fp," %d\t%s\t%f\t%f\t%f\t\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
}
其实说实话,到这里就是完整的代码了!
只要我们再把它们拼接起来,就可以编译——连接——运行了!!
#include
#include
#include
void readfile();//读取文件中的函数
struct student{//定义struct结构体类型
int num;//学号
char name[20];//学生名字
float Clanguage;//学生成绩
float math;//学生成绩
float chinese;//学生成绩
float ave;//三门课程的平均值,计算
}stu[20];
int main()
{
int i,n,num = 1;//num = 1表示进度(进度初始值为1) n表示输入(即统计的学生个数)
char ch;//定义字符变量
const char* pic = "|/-\\";//简单的动画特效
//制作进度条
//原理:进度,即num增加10%就打出一个星号“* ”,动画特效的4个 |/-\ 也是要做起的 通过num%4来实现变换
MessageBox(NULL,"这是一个学生记录系统,准备好了吗 ?","窗口",MB_OK);//用头文件制作窗口
printf("等待中......\n");//输入提示
while(1)
{
if(101 == num)//当进度条达到101的时候,进度条已满,说明可以跳出循环了
{
printf("\n加载成功!!\n");//提示加载成功
break;//退出循环
}
printf("[");//进度条开始
for(i = 0;i < num/10;i++)//到达 10% 就加个*
{
printf("*");//输入*号
}
printf("]");//进度条结束
printf("%d%%...%c\r",num++,pic[num%4]);//\r为回车符,不加\r会导致出现进度条不好看,记住d后面是它的百分符号%(别记错啦) num%4其中4代表有四个动画特效,分为|、/、-、\。
fflush(stdout);//清空标准输出缓存区中多余的数据
Sleep(20);//这里通过修改睡眠时间来控制进度条更新的速度
}
FILE *fp;//定义文件
struct student stu[20];//在主函数中定义学生结构体
fp = fopen("d:\\学习资料\\c语言\\student01.txt","w");//打开文件,fopen("d:\\stu.txt->指文件地址,可以自己修改","w->指新建一个文件,若已创建文件覆盖原内容");
printf("请输入学生数:");//在这里填写你想记录的学生信息
scanf("%d",&n);//输入学生个数
if(fp == NULL)
{
printf("文件打开失败,文件内容为空!!\n");//当文件内容为空,就提示这个
}
for(i = 0; i < n;i++)
{//在终端屏上输入学生信息
printf("学生信息:学号\t姓名\tC语言成绩\t数学成绩\t语文成绩\n");
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].Clanguage,&stu[i].math,&stu[i].chinese);
stu[i].ave=(stu[i].Clanguage+stu[i].math+stu[i].chinese)/3.0;
}
for(i = 0; i < n;i++)
{//终端屏上输出学生信息
printf("____________________________________________________________________________________________________\n");
printf("| 报告 |\n");
printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
printf("| 学号 | 姓名 | C 语言 | 数学 成绩 | 语文 成绩 | 平均分 |\n");
printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
printf("|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
printf("|___________________________________________________________________________________________________|\n\n");
// printf("输出学生信息:学号\t姓名\t语文成绩\t数学成绩\tC语言成绩\n");
// printf(" %d\t%s\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
}
fprintf(fp,"\n\n");
fprintf(fp,"汇总学生信息:\n");
for(i = 0; i < n;i++)
{//打印学生信息到指定文件,即所打开的文件地址
// fprintf(fp,"____________________________________________________________________________________________________\n");
// fprintf(fp,"| 报告 |\n");
// fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
fprintf(fp,"| 学号 | 姓名 | C 语言 | 数学 成绩 | 语文 成绩 | 平均分 |\n");
// fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
fprintf(fp,"|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
// fprintf(fp,"|___________________________________________________________________________________________________|\n\n");
// fprintf(fp," %d\t%s\t%f\t%f\t%f\t\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
}
fclose(fp);//关闭文件
readfile();//调用readfile函数
return 0;
}
void readfile(){
//运用另外一种方法,将学生信息打到终端屏上
//实现原理:将输入到文件的内容,依次从文件读取到终端屏
char str[100];//定义字符串
FILE *fp;
fp = fopen("d:\\学习资料\\c语言\\student01.txt","r");
while(fgets(str,100,fp) != 0)//运用fgets函数,实现读取文件的功能
{
printf("%s",str);//输出文件中的内容
}
}
终端屏上的效果:
文件上的效果:
既然完整代码已上传,效果图已经展示!
我们本次的C语言旅行就到此结束了,输入学生信息保存至文件,你学会了吗?
加油~!
编码路上不孤单,因为还有我们与你共同并肩,挑战C语言!