錯誤記錄功能小模塊

題目描述:
開發一個簡單錯誤記錄功能小模塊,能夠記錄出錯的代碼所在的文件名稱和行號。
處理:
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個字符爲判斷條件,並不檢查前面是否一樣。就把它們歸爲一樣了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章