希望不要被实验室的学姐看到,哈哈哈。
这个应该不存在泄漏的地方吧。。
我只是为了让自己的处理机器化一点,省的每次都自己人工统计。。
闲话不多说了
先来介绍一下这个程序要实现的功能吧。
其实是对文档进行统计,很简单的数据分析。
这个文档有五个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);
}