2016-04-27 73 views
-1

我想從具有頁面框架和引用字符串的文本文件輸入讀取例如:在我的輸入文件中我有3,7,0,1,2,0,3,0 ,4,2,3,0,3,2,1,2其中起始3是頁面幀的數量,從7開始,它是參考字符串。 expected output在C中的FIFO頁面替換,得到錯誤的輸出

#include <stdio.h> 
#include <string.h> 
void FIFO(char [],char [],int,int); 

//FIFO 
void FIFO(char s[],char Fi[],int n,int f) 
{ 
int i,j=0,k,flag=0,cnt=0; 
printf("\n\tPAGE\t FRAMES\t FAULTS"); 
for(i=0;i<n;i++) 
{ 
    for(k=0;k<f;k++) 
    { 
     if(Fi[k]==s[i]) 
      flag=1; 
    } 

    if(flag==0) 
    { 
     printf("\n\t%c\t",s[i]); 
     Fi[j]=s[i]; 
     j++; 

     for(k=0;k<f;k++) 
     { 
      printf(" %c",Fi[k]); 
     } 
     printf("\tPage-fault%d =",cnt); 
     cnt++; 
     // sum = cnt++; 
     printf(" Total Faults",cnt); 

    } 

    else 
    { 
     flag=0; 
     printf("\n\t%c\t",s[i]); 
     for(k=0;k<f;k++) 
     { 
      printf(" %c",Fi[k]); 
     } 

     printf("\tNo page-fault"); 
    } 
    if(j==f) 
     j=0; 
} 

} 

int main() 
{ 

int n1, n2,n3,n4; 
int ch,YN=1,i,l,f,k,j; 
char Fi[30],s[25]; 
char g[0]; 

/*printf("\nPlease Enter Number of Frames:"); 
scanf("%d",&f); 
printf("\nPlease Enter the length of the string: "); 
scanf("%d",&l); 
printf("\nPlease Enter the string: "); 
scanf("%s",s);*/ 

FILE *fp1;          // File Pointer Declaration 

fp1 = fopen("Inr.txt","r");      // File Opening by File Name and Read Mode r 
printf("The number of Frames"); 
fscanf(fp1,"%d",&f); 



for(i=0;i<f;i++) 
    //fscanf(fp1,"%d,",&f); 
    Fi[i]=-1; 
fclose(fp1); 
do 
{ 

    printf("\n_________ Please Select One Option __________\n"); 
    printf("\n\t1:FIFO\t2:EXIT"); 
    printf("\n\n\tEnter your choice: "); 
    scanf("%d",&ch); 

    switch(ch) 
    { 
     case 1: 
      for(i=0;i<f;i++) 
      { 
       Fi[i]=-1; 
      } 

      FIFO(s,Fi,l,f); 
      break; 
     case 2: 
      exit(0); 
    } 
    printf("\n\n\tDo u want to continue IF YES PRESS 1\n\n\tIF NO PRESS 0 : "); 
    scanf("%d",&YN); 
}while(YN==1);return(0); 

} 
+1

什麼是預期輸出,什麼是實際輸出?你做了什麼調試? – kaylum

+0

這應該是什麼?實際產出還是預期產出?請在評論中註明您的問題。 – kaylum

+0

屬於您的問題*中的單獨文本列表*;在評論中不作爲牆的文字粘貼在這裏。更新你的問題,注意預期的和實際的輸出是什麼,然後刪除評論*請*。 – WhozCraig

回答

0

也許這代碼將讓你開始...

#include <stdio.h> 
#include <string.h> 

//FIFO 
void FIFO(
     int *I__pages, 
     char *I__frames, 
     int I__maxPages, 
     int I__maxFrames 
    ) 
    { 
    int pageIndex; 
    int j=0; 
    int pageFaults=0; 
    int frameIndex; 
    int noFault=0; 

    for(frameIndex=0; frameIndex<I__maxFrames; frameIndex++) 
     I__frames[frameIndex]=-1; 

    printf("\tPAGE\t FRAMES\tFAULTS\n"); 
    for(pageIndex=0; pageIndex < I__maxPages; ++pageIndex) 
     { 
     printf("\t%d\t", I__pages[pageIndex]); 

     for(frameIndex=0; frameIndex<I__maxFrames; frameIndex++) 
     { 
     if(I__frames[frameIndex]==I__pages[pageIndex]) 
      noFault=1; 
     } 

     if(noFault) 
     { 
     noFault=0; 
     for(frameIndex=0; frameIndex<I__maxFrames; frameIndex++) 
      printf(" %2d",I__frames[frameIndex]); 

     printf("\tNo page-fault\n"); 
     continue; 
     } 

     I__frames[j++] = I__pages[pageIndex]; 
     if(j==I__maxFrames) 
     j=0; 

     for(frameIndex=0; frameIndex<I__maxFrames; frameIndex++) 
     printf(" %2d",I__frames[frameIndex]); 

     printf("\tPage-fault%d =", pageFaults++); 
     printf(" Total Faults\n"); 
     } 

    return; 
    } 

int main() 
    { 
    int ch,YN=1; 
    int maxPages = 0; 
    int maxFrames; 
    char frames[30]; 
    int pages[25]; 
    FILE *fp1 = NULL;        // File Pointer Declaration 

    fp1 = fopen("Inr.txt","r");      // File Opening by File Name and Read Mode r 
    fscanf(fp1,"%d,", &maxFrames);     // Read the maxFrames value first. 

    while(EOF != fscanf(fp1,"%d,",&pages[maxPages])) 
     ++maxPages; 

    fclose(fp1); 

    do { 
     printf("\n_________ Please Select One Option __________\n"); 
     printf("\n\t1:FIFO\t2:EXIT"); 
     printf("\n\n\tEnter your choice: "); 
     scanf("%d",&ch); 
     switch(ch) 
     { 
     case 1: 
      FIFO(pages, frames, maxPages, maxFrames); 
      break; 

     case 2: 
      return(0); 
     } 

     printf("\n\n\tDo u want to continue IF YES PRESS 1\n\n\tIF NO PRESS 0 : "); 
     scanf("%d",&YN); 
     } while(YN==1); 

    return(0); 
    } 
+0

是的,它工作,謝謝。我也正在研究LRU,它也顯示出意想不到的輸出,你可以幫忙。我可以在這裏發佈它還是新的博客 – Omi

+0

@Omi,如果作爲新問題發佈,最好。 –

+0

是的,我發佈了一個新問題,你可以看看它http://stackoverflow.com/questions/36896655/lru-page-replacement-in-c-getting-unexpected-output – Omi