进入无限循环

时间:2014-04-11 11:07:50

标签: c loops fifo page-replacement

此代码用于页面替换'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 个答案:

答案 0 :(得分:0)

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

请注意break退出switch循环。

答案 1 :(得分:0)

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

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

尝试在ch

中为fifo()设置不同的值

答案 2 :(得分:0)

你在这里没有得到另一个角色:

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

}

} while(ch&gt; 0&amp;&amp; ch&lt; 4);

一旦用户将一个字符输入到&#39; ch&#39;,您就会继续使用这个字符串循环。

尝试添加

scanf("%d",&ch);

在&#39;之前&#39; statment

答案 3 :(得分:0)

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

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