Вход в бесконечный цикл

Этот код предназначен для алгоритма замены страницы 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 ответа

Я не могу проверить вашу программу, но я думаю, что ошибка:

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

попробуйте установить другое значение дляch в fifo()

Поскольку вы не меняете значение chвполне возможно, что }while(ch>0 && ch<4); будет цикл до бесконечности.

Помни что break выходит из switchне петля.

Вы не получаете другой символ здесь:

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', вы продолжаете цикл с этим бесконечным.

попробуйте добавить

scanf("%d",&ch);

незадолго до постановки "в то время"

Проще говоря: вы получаете некоторые параметры от пользователя и используете их в условном цикле. Однако в цикле вы никогда не меняете и не обновляете значения параметров. Поэтому, когда пользователь выбирает значение, которое создаст цикл, оно также будет выполнено в следующий раз, в следующий раз.... оно будет повторяться до бесконечности.

Я понимаю, что после каждого цикла вы снова хотите спросить пользователя, что он хочет сделать, если он не введет неправильный номер. Затем вы распечатываете "неверный выбор" и останавливаетесь. Самое простое, что нужно сделать, это переместить строку 26 (do{) до строки 10 (после строки int ch;).

Другие вопросы по тегам