Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 15th, 2012  |  syntax: None  |  size: 2.73 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. printf() prints junk characters
  2. load AAAAAAAA
  3. load AAAAAAAA
  4. load BBBBBBBB
  5. load BBBBBBBB
  6. load BBBBBBBB
  7. load BBBBBBBB
  8. load AAAAAAAA
  9. load CCCCCCCC
  10. load CCCCCCCC
  11. load DDDDDDDD
  12. load EEEEEEEE
  13. load EEEEEEEE
  14. load FFFFFFFF
  15.        
  16. #include<stdio.h>
  17. #include<stdlib.h>
  18. #include<string.h>
  19.  
  20. FILE *fpointer;
  21.  
  22. typedef struct cache Cache;
  23. struct cache{
  24.     char DATA[8];
  25.     int COUNT;
  26.     int LOAD;
  27.     Cache *NEXT;
  28. };
  29.  
  30. int scan(char *addr, Cache *front){
  31.     while(front != NULL){
  32.         printf("compare: %s & %sn", addr, front->DATA);
  33.         if(strcmp(addr, front->DATA) == 0){
  34.             front->COUNT++;
  35.             return 0;
  36.         }
  37.         front->LOAD++;
  38.         front = front->NEXT;
  39.     }
  40.     return 1;
  41. }
  42.  
  43.  
  44. void FirstInFirstOut(int x){
  45.     Cache *ITEM[x];
  46.     Cache *front, *head;
  47.     Cache *node;
  48.     char addr[8]="";
  49.     int i=0, j=0, k=0, m=0;
  50.  
  51.     for(i=0; i<x; i++){
  52.         ITEM[i] = NULL;
  53.     }
  54.  
  55.     front = NULL;
  56.     head = NULL;
  57.  
  58.     while(!feof(fpointer)){
  59.         fscanf(fpointer, "load %c%c%c%c%c%c%c%cn", &addr[0],&addr[1],&addr[2],&addr[3],&addr[4],&addr[5],&addr[6],&addr[7]);
  60.         addr[8] = '';
  61.         printf("read item: %sn", addr);
  62.  
  63.         if(front != NULL){
  64.             if(scan(addr, front)==0)
  65.                 continue;
  66.         }
  67.  
  68.         node = (Cache*)malloc(sizeof(Cache));
  69.         strcpy(node->DATA, addr);
  70.         node->COUNT = 0;
  71.         node->LOAD = 0;
  72.         node->NEXT = NULL;
  73.         if(head == NULL){
  74.             head = node;
  75.             front = node;
  76.         }else{
  77.             head->NEXT = node;
  78.             head = node;
  79.         }
  80.  
  81.  
  82.         if(j<x){
  83.             ITEM[j] = node;
  84.             printf("insert... %sn", ITEM[j]->DATA);
  85.         }else{
  86.             m = j%x;          //get the new index
  87.             free(ITEM[m]);
  88.             ITEM[m] = node;
  89.             printf("insert... %sn", ITEM[m]->DATA);
  90.         }
  91.         j++;
  92.  
  93.     }
  94.  
  95.     printf("Cache itmes:n");
  96.     for(i=0; i<x; i++){
  97.         printf("Item %d: ", i+1);
  98.         if(ITEM[i]->DATA == NULL){
  99.             printf("NULLn");
  100.         }else{
  101.             for(k=0; k<8; k++){
  102.                 printf("%c", ITEM[i]->DATA[k]);
  103.             }
  104.             printf("n");
  105.         }
  106.         free(ITEM[i]);
  107.     }
  108.  
  109. }
  110.  
  111. int main(){
  112.     char fname[20]="", algo[5]="";
  113.     int entries=0;
  114.  
  115.     printf("Input file:n");
  116.     scanf("%s", fname);
  117.     printf("Number of cache items:n");
  118.     scanf("%d", &entries);
  119.     printf("Replacement algorithm:n");
  120.     scanf("%s", algo);
  121.  
  122.     if((fpointer = fopen(fname,"r")) == NULL){
  123.         printf("Error opening file.n");
  124.         return main();
  125.     }
  126.  
  127.     if(entries == 0){
  128.         printf("Nothing in the cache.n");
  129.         return main();
  130.     }
  131.  
  132.     if(strcmp(algo, "FIFO") == 0){
  133.         FirstInFirstOut(entries);
  134.     }
  135.  
  136.  
  137.     return main();
  138.  
  139. }
  140.        
  141. char addr[8]="";
  142. ....
  143. addr[8] = '';