0

此代码用于页面替换“FIFO”算法。

当我运行代码时,它会进入无限循环并且不会结束。我尝试搜索它,但我无法识别它。

代码:

#include <stdio.h>

int i,numOfPages,frameSize,frames[10],pages[30];
void fifo();
//void lru();
//void opt();

int main(){
int ch;

printf("\nEnter the total number of pages: ");
scanf("%d",&numOfPages);

printf("\nEnter the seq of pages: ");
for(i=0;i<numOfPages;i++)
    scanf("%d",&pages[i]);

printf("\nEnter the frame size: ");
scanf("%d",&frameSize);

printf("\n***MENU***");
printf("\n1.FIFO \t2.LRU \t3.OPT");
printf("\n\nEnter the choice: ");
scanf("%d",&ch);

do{
    switch(ch)
    {
        case 1: fifo();
            break;
        /*case 2: lru();
            break;
        case 3: opt();
            break;*/
        default: printf("Invalid choice!");

    }
}while(ch>0 && ch<4);

return 0;
}



void fifo(){

int currNum,pindex=0,findex=0,faults=0,flag;

for(i=0;i<frameSize;i++)
    frames[i] = -1;

while(pindex < numOfPages){

    flag=1;
    currNum = pages[pindex];

    for(i=0;i<frameSize;i++)
    {
        if(currNum==frames[i])
        {
            pindex++;
            flag=0;
            break;
        }
    }

    if(flag==1)
    {
    if(findex < frameSize)
    {
        frames[findex] = pages[pindex];
        pindex++;
        findex++;
        faults++;
    }else{
        findex = 0;
    }
    }

printf("\nCurrent Frames: ");
for(i=0;i<frameSize;i++)
    printf("%d \t",frames[i]);

}


printf("\n\nTotal number of page faults are: %d and Total number of page hits are: %d",faults,(numOfPages-faults));

}  
4

4 回答 4

0

由于您不更改 的值ch,因此很可能}while(ch>0 && ch<4);会无限循环。

请记住,break退出switch而不是循环。

于 2014-04-11T11:10:39.163 回答
0

我无法测试你的程序,但我认为错误是:

while(ch>0 && ch<4);

尝试为chin 设置不同的值fifo()

于 2014-04-11T11:11:12.280 回答
0

你在这里没有得到另一个字符:

do{
switch(ch)
{
    case 1: fifo();
        break;
    /*case 2: lru();
        break;
    case 3: opt();
        break;*/
    default: printf("Invalid choice!");

}

}while(ch>0 && ch<4);

一旦用户在“ch”中输入了一个字符,你就会一直循环使用这个 infinitley。

尝试添加

scanf("%d",&ch);

就在“while”语句之前

于 2014-04-11T11:11:54.533 回答
0

简而言之:您从用户那里获取一些参数并在条件循环中使用它们。但是在循环中,您永远不会更改或更新参数值。因此,当用户选择一个将创建循环的值时,它也会在下一次,下一次......它循环直到无穷大。

我知道在每个循环之后,您想再次询问用户它想要做什么,除非它输入了一个无效的数字。然后你打印出“无效的选择”并停止。最简单的做法是将第 26 行 ( do{) 移动到第 10 行(在第 10 行之后int ch;)。

于 2014-04-11T11:25:38.007 回答