2016-04-27 11 views
-1

私はページフレームと参照文字列を持つテキストファイルの入力から読み込もうとしています。たとえば、私の入力ファイルに3,7,0,1,2,0,3,0 、4,2,3,0,3,2,1,2ここで、開始3はページフレームの数であり、番号7以降は参照文字列である。 expected outputFIFOのページの置換Cの間違った出力の取得

#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 rightnowにも取り組んでおり、予期しない結果を示しています。ここに投稿することもできますし、新しいブログ – Omi

+0

@Omi、新しい質問として投稿してください。 –

+0

はい私は新しい質問を投稿しました。見てみることはできますかhttp://stackoverflow.com/questions/36896655/lru-page-replacement-in-cgetting-unexpected-output – Omi

関連する問題