
Untitled
By: a guest on
May 15th, 2012 | syntax:
None | size: 2.73 KB | hits: 15 | expires: Never
printf() prints junk characters
load AAAAAAAA
load AAAAAAAA
load BBBBBBBB
load BBBBBBBB
load BBBBBBBB
load BBBBBBBB
load AAAAAAAA
load CCCCCCCC
load CCCCCCCC
load DDDDDDDD
load EEEEEEEE
load EEEEEEEE
load FFFFFFFF
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE *fpointer;
typedef struct cache Cache;
struct cache{
char DATA[8];
int COUNT;
int LOAD;
Cache *NEXT;
};
int scan(char *addr, Cache *front){
while(front != NULL){
printf("compare: %s & %sn", addr, front->DATA);
if(strcmp(addr, front->DATA) == 0){
front->COUNT++;
return 0;
}
front->LOAD++;
front = front->NEXT;
}
return 1;
}
void FirstInFirstOut(int x){
Cache *ITEM[x];
Cache *front, *head;
Cache *node;
char addr[8]="";
int i=0, j=0, k=0, m=0;
for(i=0; i<x; i++){
ITEM[i] = NULL;
}
front = NULL;
head = NULL;
while(!feof(fpointer)){
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]);
addr[8] = ' ';
printf("read item: %sn", addr);
if(front != NULL){
if(scan(addr, front)==0)
continue;
}
node = (Cache*)malloc(sizeof(Cache));
strcpy(node->DATA, addr);
node->COUNT = 0;
node->LOAD = 0;
node->NEXT = NULL;
if(head == NULL){
head = node;
front = node;
}else{
head->NEXT = node;
head = node;
}
if(j<x){
ITEM[j] = node;
printf("insert... %sn", ITEM[j]->DATA);
}else{
m = j%x; //get the new index
free(ITEM[m]);
ITEM[m] = node;
printf("insert... %sn", ITEM[m]->DATA);
}
j++;
}
printf("Cache itmes:n");
for(i=0; i<x; i++){
printf("Item %d: ", i+1);
if(ITEM[i]->DATA == NULL){
printf("NULLn");
}else{
for(k=0; k<8; k++){
printf("%c", ITEM[i]->DATA[k]);
}
printf("n");
}
free(ITEM[i]);
}
}
int main(){
char fname[20]="", algo[5]="";
int entries=0;
printf("Input file:n");
scanf("%s", fname);
printf("Number of cache items:n");
scanf("%d", &entries);
printf("Replacement algorithm:n");
scanf("%s", algo);
if((fpointer = fopen(fname,"r")) == NULL){
printf("Error opening file.n");
return main();
}
if(entries == 0){
printf("Nothing in the cache.n");
return main();
}
if(strcmp(algo, "FIFO") == 0){
FirstInFirstOut(entries);
}
return main();
}
char addr[8]="";
....
addr[8] = ' ';