C语言文件的文本怎么读取?

血崩了,我连读取都不会,后面还要计算,怎么弄呢?... 血崩了,我连读取都不会,后面还要计算,怎么弄呢? 展开
 我来答
已存在这个名字
2019-05-31 · TA获得超过159个赞
知道小有建树答主
回答量:262
采纳率:78%
帮助的人:57.7万
展开全部

根据你给的文件保存的数据的格式,我猜测每一行是一个学生的信息,格式如下:

序号 姓名 成绩1 成绩2 成绩3 ...

知道了题意和题目要求,那么一切将会变得简单起来,请看代码。

#include <stdio.h>

#define READ_FILE "data.txt"    /* 要读取的文件的名字 */
#define WRITE_FILE "T_data.txt" /* 要写入的文件的名字 */
#define STU_NUM 10              /* 最大学生人数       */
#define MAX_LEN 50              /* 一行的最大字符数   */
/*
 *   获取总分函数
 */
int get_sum(char const *msg) {

int sum = 0;
int tmp;
/*
 *   遍历一行字符
 */
while ( *msg != '\0' ) {

/*
 *  以空格为一项成绩的分隔标志
 */
tmp = 0;
while ( *msg != ' ' && *msg != '\0' ) {
/*
 *   char类型数字转int类型数字
 */
tmp = ( tmp * 10 ) + ( ( *msg ) - '0' );
msg++;
}
/*
 *   求总和
 */
sum += tmp;
if ( *msg == '\0' ) {

break;
}
msg++;
}
return sum;
}

int main(void) {

FILE *rfp, *wfp;                /* 声明读取/写入文件指针    */
char student[STU_NUM][MAX_LEN]; /* 存放读取到的数据缓存数组 */
char ch;                       
int sum[STU_NUM];               /* 成绩总和 */
int i = 0;
int j = 0;
int k = 0;
rfp = fopen(READ_FILE, "r");    /* 打开数据文件 */
if ( rfp == NULL ) {

perror(READ_FILE);
exit(1);
}
for ( i = 0; i < STU_NUM; i++ ) {

sum[i] = 0;
}
/*
 *    逐个字符读取文件的内容,
 *    直至遇到文件结束符为止。
 */
i = 0;
while ( ( ch = fgetc(rfp) ) != EOF ) {
/*
 *   遇到换行符表示已经读取完一个学生的资料;
 *   否则继续将数据写入缓存数组中。
 */
if ( ch == '\n' ) {

student[i][j] = '\0';
j = 0;
i += 1;
} else {

student[i][j++] = ch;
}
}
student[i][j] = '\0';
wfp = fopen(WRITE_FILE, "w");
/*
 *  开始分析数据
 *  根据文件存放数据的格式,从下标为2的位置开始分析数据。
 *  当遇到空格时证明后面的数据是成绩,每一科成绩分数均以空格分开。
 *  printf是显示出来。
 *  fprintf是写入另一个文件。
 */
for ( j = 0; j <= i; j++ ) {

k = 2;
printf("%c%c", student[j][0], student[j][1]);
fprintf(wfp, "%c%c", student[j][0], student[j][1]);
while ( student[j][k] != ' ' ) {

printf("%c", student[j][k]);
fprintf(wfp, "%c", student[j][k]);
k++;
}
printf("\'s sum of score sum is ");
fprintf(wfp, "\'s sum of score sum is ");
sum[j] = get_sum(&student[j][k]);
printf("%d\n", sum[j]);
fprintf(wfp, "%d\n", sum[j]);
}
/*
 *  记得关闭文件哦。
 */
fclose(rfp);
fclose(wfp);
return 0;
}

以下是运行结果:

这个程序仅仅是针对你的题目要求来的,文件存放的数据格式不能更改,否则会出错。每一行必须以回车键结束,最后一行的最后一个字符之后什么也不能有。我尽量以你看得懂的方法来写,关键部分都带有注释,有问题不要追问了,自己多思考思考,实在解决不来还是很欢迎可以追问的哦,哈哈哈!!!

更多追问追答
追答
后面多打了一个sum,不过不影响。
追问
你能解释下为啥我那个不能逗号吗?我爸逗号消掉然后就可以做下去了,但还是谢谢你哈
人人顺风顺水
2019-05-30 · TA获得超过164个赞
知道小有建树答主
回答量:315
采纳率:77%
帮助的人:114万
展开全部
fscanf格式串里的逗号不能要
追问
为啥啊?好迷,结构体输入时也不逗号...我记得以前数组那一块可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式