任务和代码
/*
*Copyright (c)2016,CSDN学院 | C语言及程序设计初步
*All rights reserved.
*文件名称:p43-3.c
*作 者:管运煌
*完成日期:2016年6月23日
*从文件salary.txt中读入工人的工号、基本工资、奖金,将奖金全部增加20%(好事)后,
将工号、基本工资、奖金和应发工资(前项目之和)保存到文件salarylist.txt中。
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,gh; //gh为工号
float gz,jj,sum,cam; //分别为工资、奖金、应发工资、读入数据的存放变量
FILE *fp1,*fp2;
if ((fp1=fopen ("salary.txt","r"))==NULL)
{
printf ("connot open!");
exit (0);
}
if ((fp2=fopen ("salarylist.txt","w"))==NULL)
{
printf ("connot open!");
exit (0);
}
fprintf (fp2,"工号 基本工资 奖金 应发工资\n");
for (i=1;fscanf (fp1,"%f",&cam)!=EOF;i++) //i为switch计量,每4次一个循环(因为每个工号的信息为4项)
{
switch (i)
{
case 1: //i为1时把读取的数据赋值给工号
gh=(int)cam;
fprintf (fp2,"%d\t",gh); //写入文件
break;
case 2:
gz=cam;
fprintf (fp2,"%10.2f\t",gz);
break;
case 3:
jj=cam+cam*0.2;
fprintf (fp2,"%10.2f\t",jj);
break;
case 4: //i为4时,基本工资与奖金之和为实发工资
sum=gz+jj;
fprintf (fp2,"%10.2f\n",sum);
i=0; //已读取完一个工号四项信息,把i赋值为0通过循环重新进入switch语句。
break;
}
}
fclose (fp1);
fclose (fp2);
return 0;
}
运行结果
知识总结
读入、输出文件函数使用
心得体会
老师用三行代码解决的问题
(while(fscanf(fpin, "%d %lf %lf", &num, &salary, &award)!=EOF) //当读取成功……
{
award *=1.2;
fprintf(fpout, "%d %.2f %.2f %.2f\n", num, salary, award, salary+award );
} )
我TM用了近二十行代码,彻底蒙逼了十来分钟!
客观原因是对输入输出文件函数不熟悉,总以为fscanf 函数里头的变量只能是一个;主观原因是:自已TM脑洞太小,试都没试一下!