麻烦帮忙讲一下这程序中各个语句的功能。谢谢啊

#include <stdlib.h>
#include <stdio.h>
#include <memory.h> //提供了内存操作相关的一些函数及声明
float waterfact, powerfact;
int counter;
typedef struct userinfo
{
long number;
int waterconsump;
int powerconsump;
} userinfo;

userinfo users[100];

void createdatafile()
{
FILE *fp;
int ws, ps;
long num;
float t1, t2;

if ((fp = fopen("input.dat", "w")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}

printf("请输入水费的标准和电费标准(空格分开):\n");
scanf("%f %f", &t1, &t2);
fprintf(fp, "%.2f %.2f\n", t1, t2);

printf("请输入住户信息(住户地址 水耗<吨> 电耗<度>,0结束输入):\n");

while (1)
{
scanf("%ld", &num);

if (num == 0) break;

scanf("%d %d", &ws, &ps);
fprintf(fp, "%ld %d %d\n", num, ws, ps);
}

fclose(fp);
}

void readdatafile()
{
FILE *fp;
int i = 0;

if ((fp = fopen("input.dat", "r")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}
fscanf(fp, "%f %f", &waterfact, &powerfact);

while (1)
{
memset(users + i, 0, sizeof(userinfo));
fscanf(fp, "%ld %d %d", &users[i].number, 
&users[i].waterconsump, &users[i].powerconsump);

if (users[i].number == 0)
break;

++i;
}
counter = i;
fclose(fp);
}

void processdata()
{
FILE *fp;
float t1, t2, t3, s1, s2, s3;
int i, s4, s5;

t1 = t2 = t3 = s1 = s2 = s3 = 0.0;
s4 = s5 = 0;

if ((fp = fopen("charge.dat", "w")) == NULL)
{
printf("打开文件失败!\n");
exit(-1);
}

printf("住户地址 水耗(吨) 水费(元) 电耗(度) 电费(元) 合计(元)\n");

for (i = 0; i < counter; ++i)
{
t1 = users[i].waterconsump * waterfact;
t2 = users[i].powerconsump * powerfact;
t3 = t1 + t2;
s1 += t1; s2 += t2;
s3 += t3;
s4 += users[i].waterconsump;
s5 += users[i].powerconsump;
fprintf(fp, "%ld %d %.2f %d %.2f %.2f\n", users[i].number, 
users[i].waterconsump, t1, users[i].powerconsump, t2, t3);

printf("%ld\t%d\t%.2f\t%d\t%.2f\t%.2f\n", users[i].number, 
users[i].waterconsump, t1, users[i].powerconsump, t2, t3);
}

fprintf(fp, "总共 %d %.2f %d %.2f %.2f\n", s4, s1, s5, s2, s3);

printf("总共\t%d\t%.2f\t%d\t%.2f\t%.2f\n", s4, s1, s5, s2, s3);

fclose(fp);

}

void main()
{
createdatafile();
readdatafile();
processdata();
system("PAUSE");
}

炎炎设计
浏览 171回答 3
3回答

Helenr

初学者吧,先打好基础,从简单开始,慢慢深入

largeQ

#include&nbsp; #include&nbsp; #include&nbsp;&nbsp;//提供了内存操作相关的一些函数及声明 float&nbsp;waterfact,&nbsp;powerfact; int&nbsp;counter; typedef&nbsp;struct&nbsp;userinfo { &nbsp;long&nbsp;number; &nbsp;int&nbsp;waterconsump; &nbsp;int&nbsp;powerconsump; }&nbsp;userinfo; userinfo&nbsp;users[100];//定义结构体数组&nbsp; void&nbsp;createdatafile() { &nbsp;FILE&nbsp;*fp; &nbsp;int&nbsp;ws,&nbsp;ps; &nbsp;long&nbsp;num; &nbsp;float&nbsp;t1,&nbsp;t2; &nbsp; &nbsp;if&nbsp;((fp&nbsp;=&nbsp;fopen("input.dat",&nbsp;"w"))&nbsp;==&nbsp;NULL)&nbsp;&nbsp;//判断文件是否能打开 &nbsp;{ &nbsp;&nbsp;printf("打开文件失败!\n"); &nbsp;&nbsp;exit(-1);&nbsp;//&nbsp;打开文件失败&nbsp;退出 &nbsp;} &nbsp; &nbsp;printf("请输入水费的标准和电费标准(空格分开):\n"); &nbsp;scanf("%f&nbsp;%f",&nbsp;&t1,&nbsp;&t2);&nbsp;//&nbsp;输入&nbsp;&nbsp;&nbsp;注意&nbsp;:&nbsp;两个输入之间有一个空格&nbsp;格式输出&nbsp;,&nbsp;&nbsp; &nbsp;fprintf(fp,&nbsp;"%.2f&nbsp;%.2f\n",&nbsp;t1,&nbsp;t2);&nbsp;//&nbsp;数据写入&nbsp;文件fp&nbsp; &nbsp; &nbsp;printf("请输入住户信息(住户地址&nbsp;水耗&nbsp;电耗,0结束输入):\n"); &nbsp; &nbsp;while&nbsp;(1)&nbsp;&nbsp;//&nbsp;&nbsp;录入数据,直到&nbsp;num=0 &nbsp;{ &nbsp;&nbsp;scanf("%ld",&nbsp;&num); &nbsp;&nbsp; &nbsp;&nbsp;if&nbsp;(num&nbsp;==&nbsp;0)&nbsp;break; &nbsp;&nbsp; &nbsp;&nbsp;scanf("%d&nbsp;%d",&nbsp;&ws,&nbsp;&ps); &nbsp;&nbsp;fprintf(fp,&nbsp;"%ld&nbsp;%d&nbsp;%d\n",&nbsp;num,&nbsp;ws,&nbsp;ps); &nbsp;} &nbsp; &nbsp;fclose(fp); } void&nbsp;readdatafile() { &nbsp;FILE&nbsp;*fp; &nbsp;int&nbsp;i&nbsp;=&nbsp;0; &nbsp;if&nbsp;((fp&nbsp;=&nbsp;fopen("input.dat",&nbsp;"r"))&nbsp;==&nbsp;NULL) &nbsp;{ &nbsp;&nbsp;printf("打开文件失败!\n"); &nbsp;&nbsp;exit(-1); &nbsp;} &nbsp;fscanf(fp,&nbsp;"%f&nbsp;%f",&nbsp;&waterfact,&nbsp;&powerfact); &nbsp;while&nbsp;(1) &nbsp;{ &nbsp;&nbsp;memset(users&nbsp;+&nbsp;i,&nbsp;0,&nbsp;sizeof(userinfo)); &nbsp;&nbsp;fscanf(fp,&nbsp;"%ld&nbsp;%d&nbsp;%d",&nbsp;&users[i].number,&nbsp; &nbsp;&nbsp;&nbsp;&users[i].waterconsump,&nbsp;&users[i].powerconsump); &nbsp;&nbsp;if&nbsp;(users[i].number&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;++i; &nbsp;} &nbsp;counter&nbsp;=&nbsp;i; &nbsp;fclose(fp); } void&nbsp;processdata() { &nbsp;FILE&nbsp;*fp; &nbsp;float&nbsp;t1,&nbsp;t2,&nbsp;t3,&nbsp;s1,&nbsp;s2,&nbsp;s3; &nbsp;int&nbsp;i,&nbsp;s4,&nbsp;s5; &nbsp;t1&nbsp;=&nbsp;t2&nbsp;=&nbsp;t3&nbsp;=&nbsp;s1&nbsp;=&nbsp;s2&nbsp;=&nbsp;s3&nbsp;=&nbsp;0.0;&nbsp;//&nbsp;初始化 &nbsp;s4&nbsp;=&nbsp;s5&nbsp;=&nbsp;0; &nbsp;if&nbsp;((fp&nbsp;=&nbsp;fopen("charge.dat",&nbsp;"w"))&nbsp;==&nbsp;NULL) &nbsp;{ &nbsp;&nbsp;printf("打开文件失败!\n"); &nbsp;&nbsp;exit(-1); &nbsp;}

幕布斯7119047

createdatafile(); 让用户输入一些数据(住户地址 水耗<吨> 电耗<度>等 ),然后产生一个数据文件 ;readdatafile 则从改文件中读出数据放到 users,counter中;processdata 比较简单,对Users数据进行处理打印,同事做点统计工作。
打开App,查看更多内容
随时随地看视频慕课网APP