关于用C语言来实现对一个文档中的条目数字进行统计排序的实现

希望不要被实验室的学姐看到,哈哈哈。

这个应该不存在泄漏的地方吧。。

我只是为了让自己的处理机器化一点,省的每次都自己人工统计。。

闲话不多说了


先来介绍一下这个程序要实现的功能吧。

其实是对文档进行统计,很简单的数据分析。

这个文档有五个row,每个row里面都有很多条数据行,每个数据行一行。格式分别为图书名字+空格+票数。

如下所示——

永生大帝 2
茅山道士之都市逍遥游 2
混在美女宿舍的日子 1
Sorry 5
异界称王 1
天机第一季:沉睡之城 1

我要做的就是统计出每个row里面票数最高的三本书。

在调试这个代码的时候,老出现文件打不开的情况。。。当时就愤怒了,不晓得怎么去调试。

后来找到了errno这个参数。然后调用之后发现原来是文件路径错误。。。导致的。。。发现问题后改好程序就正常运行了。

好开心,学会了一个新东西~。

关于errno这个的具体指示,可以看这个网址。http://blog.chinaunix.net/space.php?uid=790245&do=blog&id=2037335

我理解的就是errno会告诉你错误的原因,很好的东东喔~~~解决了那种莫名其妙的烦恼。


附上代码啦~~~

/*
**这个程序的主要功能是打开一个文件逐行读取数据。
**每行的数据包括图书的名字 票数
**对每个row序列完成统计,得出每个row序列票数最高的三本书,输出到新文档中
**COPYRIGHT TO LUYANG
*/
#include "header.h"
#include "stdlib.h"
#include "errno.h"
extern int errno;

FILE* handleStatics(FILE* input, FILE *output)
{
	char *string=NULL;//用来读取每一行的字符
	bookInfo ans[4];
	memset(ans,0,sizeof(ans));//将ans[4]全部都初始化为0
	char outputString[Max_Line_Length];//用来指向输出到输出文件的字符串
	char *temp=NULL;//用来存储每本书得到的票数
	char *buffer=(char*)malloc(Max_Line_Length*sizeof(char));
	string=fgets(buffer,Max_Line_Length,input);//读取一行
	while (string!=NULL)//若没到文件的结尾
	{
		if (*string=='*'||*string=='\0')//如果没有碰到*或者文件结束符,*号用来分隔每个row
		{
			strcpy(outputString,"\nFirst\n");//将每个row的前三输出
			strcat(outputString,ans[1].bookName);
			fputs(outputString,output);
			puts(outputString);
			strcpy(outputString,"Second\n");
			strcat(outputString,ans[2].bookName);
			fputs(outputString,output);
			puts(outputString);
			strcpy(outputString,"Third\n");
			strcat(outputString,ans[3].bookName);
			fputs(outputString,output);
			puts(outputString);
			memset(ans,0,sizeof(ans));
			fputs("*********************************",output);
		}
		else
		{    
			strcpy(ans[0].bookName,string);
			//比较每条记录书的票数,排序插入前三
			temp=strchr(string,' ');//找到空格的地方
			*temp='\0';
			temp++;
			ans[0].voteNum=atoi(temp);//得到每本书的票数
			if (ans[0].voteNum>ans[1].voteNum)//比较排序插入
			{
				strcpy(ans[3].bookName,ans[2].bookName);
				ans[3].voteNum=ans[2].voteNum;
				strcpy(ans[2].bookName,ans[1].bookName);
				ans[2].voteNum=ans[1].voteNum;
				strcpy(ans[1].bookName,ans[0].bookName);
				ans[1].voteNum=ans[0].voteNum;
			}
			else 
			{
				if (ans[0].voteNum>ans[2].voteNum)
				{
					strcpy(ans[3].bookName,ans[2].bookName);
					ans[3].voteNum=ans[2].voteNum;
					strcpy(ans[2].bookName,ans[0].bookName);
					ans[2].voteNum=ans[0].voteNum;
				}
				else
				{
					if(ans[0].voteNum>ans[3].voteNum)
					{
						strcpy(ans[3].bookName,ans[0].bookName);
						ans[3].voteNum=ans[0].voteNum;
					}
				}
			}
		}
		string=fgets(buffer,Max_Line_Length,input);
	}
	puts("read a row already\n");//将最后的一组row的数据输出
	puts("now write datas to output file\n");
	strcpy(outputString,"\nFirst\n");
	strcat(outputString,ans[1].bookName);
	fputs(outputString,output);
	puts(outputString);
	strcpy(outputString,"Second\n");
	strcat(outputString,ans[2].bookName);
	fputs(outputString,output);
	puts(outputString);
	strcpy(outputString,"Third\n");
	strcat(outputString,ans[3].bookName);
	fputs(outputString,output);
	puts(outputString);
	memset(ans,0,sizeof(ans));
	fputs("*****************A FILE HAS BEEN HANDLED****************",output);
	return output;
}



void main()
{
	FILE *input;
	FILE *output;
	const char *inputfileName="no_remmend1_statistics.txt";
	const char *outputfileName="ans.txt";
	//	printf("Please enter the input file name\n");
	//	scanf("%s",&inputfileName);
	//	printf("Please enter the output file name\n");
	//	scanf("%s",&outputfileName);
	input=fopen(inputfileName,"r+");
	if (input==NULL)
	{
		printf("%d\n",errno);
		exit(EXIT_FAILURE);
	}
	puts("input file open\n");
	output=fopen(outputfileName,"a+");
	if (output==NULL)
	{
		exit(EXIT_FAILURE);
	}
	puts("output file open\n");
	output=handleStatics(input,output);
	fclose(input);
	fclose(output);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值