【原创】C语言处理文件数据(2)

 

【原创】C语言处理文件数据(2)

 

今天又帮同学处理了数据,再做个记录。

数据文件总共800行,部分原数据格式:

13 289:1 88:3 107:1 50:2 199:1 68:2 64:1 95:6 244:1 118:1 122:2 256:1 228:1 
11 289:2 88:1 50:1 193:1 256:1 20:2 24:1 228:1 140:2 169:1 93:3 
15 289:1 107:1 157:1 64:1 204:1 244:1 231:5 183:1 101:1 118:1 122:1 256:1 228:1 
7 158:1 68:3 234:2 86:1 144:2 20:1 228:1 
5 289:1 234:1 102:1 20:1 228:1 
2 68:1 234:1 
6 289:2 64:1 293:1 256:1 20:2 228:1 
10 197:2 147:1 289:1 107:2 21:1 213:1 118:1 20:1 228:1 191:1 
15 289:2 88:2 68:1 64:1 95:1 204:1 231:3 277:1 59:1 267:1 256:1 20:2 24:1 228:1 93:2 

要求:将每行数据行首的数字全部相加,得到他们的总和,然后输出。按照上面的数据即输出:sum = 84.

示例代码:

/*************************************************************************
	> File Name: datasum.c
	> Author: Geng
	> Mail: genglut@163.com
	> Created Time: Sat 01 Nov 2014 08:16:46 PM CST
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	FILE *filesrc, *filedest;
	char ch;//接收从源文件读到的字符
	char a[3] = {'\0'};//用来存储每行开始的数据,因为最多是两位数,所以定义3个元素就够用。
	int temp;//临时存储字符转换后的数据
	long sum = 0;//存储每行开始数字的总和
	if((filesrc = fopen("data.txt", "r")) == NULL)//打开文件
	{
		perror("fopen");
		exit(EXIT_FAILURE);
	}

	while(!feof(filesrc))//判断是否读到文件末尾
	{
		ch = fgetc(filesrc);//读每行的第一个字符,肯定是数字字符
		a[0] = ch;//将第一个字符存储到a【0】中
		ch = fgetc(filesrc);//读每行的第二个字符,可能是数字字符,也可能是空格
		if(ch == ' ')//当是空格时,什么都不做
		{
			;
		}
		else//当第二个字符是数字时,存储到a【1】中
		{
			a[1] = ch;			
		}
		temp = atoi(a);//利用atoi函数将字符转换为数字
		sum = sum + temp;//求和
		while ((ch = fgetc(filesrc)) != '\n')//判断是否读到了行末尾
		{
			if(ch == EOF)//非常关键的一行代码!!!判断行的末尾字符是不是文件结束符EOF,如果没有这步判断,则无法跳出循环,即进入死循环。
				break;//如果是EOF,则跳出while循环

			continue;//如果不是EOF,则继续读下一个字符
		}
		a[0] = '\0';//这两行作用是,将字符数组a清空,否则可能会把上一行的行首数据加到下一行,导致sum出错。
		a[1] = '\0';
	}
	printf("sum = %ld\n", sum);//打印出所有行首数据的总和

	return 0;
}

 

原文链接:http://blog.csdn.net/geng823/article/details/40687289

posted @ 2014-11-01 22:48  GengLUT  阅读(147)  评论(0编辑  收藏  举报