此代码用于页面替换'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));
}
答案 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;
行之后)。