题目描述:
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理:
1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
输入描述:
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
输出描述:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
示例1
输入
复制
E:\V1R2\product\fpgadrive.c 1325
输出
复制
fpgadrive.c 1325 1
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <math.h>
typedef struct {
char str[200];
int num;
int count;
}error_log;
int main(){
char str[1000];
int i,j,k,len,arrcnt=0;
error_log *log[1000],*temp;
char *p;
temp=(error_log *)malloc(sizeof (error_log));
while(scanf("%s %d",temp->str,&(temp->num))!=EOF)
{
p=strrchr(temp->str,'\\');
p=p+1;
len=strlen(p);
if(len>16)
p=p+len-16;
for(i=0;i<arrcnt;i++)
{
if(strcmp(log[i]->str,p)==0)
{
if(log[i]->num==temp->num)
{
(log[i]->count)++;
break;//这里break 的意思是,如果有一样的,那么就跳出直接终止
//也就只可能出现相同的一次,后面不可能还有一模一样的。
//同时这里的i也没有++,所以后面是不会把他写进数组里面的
}
}
}
if(arrcnt==i)
{
log[arrcnt]=(error_log *)malloc(sizeof (error_log));//把传输进来的每个字符串
//都复制到log数组中
strcpy(log[arrcnt]->str,p);
log[arrcnt]->num=temp->num;
log[arrcnt]->count=1;
arrcnt++;
}
}
if(arrcnt>8)
j=arrcnt-8;//同样的这里也是,如果超过8那么就取后面的8个。
else j=0;
for(;j<arrcnt;j++)
printf("%s %d %d\n",log[j]->str, log[j]->num,log[j]->count);
return 0;
}
在这个代码中只是以文件名的后16个字符为判断条件,并不检查前面是否一样。就把它们归为一样了。