| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:[求助]我的循环有问题!跳不出来,恳求各位给看看吧
取消只看楼主 加入收藏
lhjlhj123123
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-4-25
收藏
 问题点数:0 回复次数:0 
[求助]我的循环有问题!跳不出来,恳求各位给看看吧

我做的银行家算法,结果在里面有个算法循环有问题,跳不出来了,高手们给指点指点嘛!
先谢谢哈!!
代码如下:
#include"lhj.h"
#include <iostream.h>

//以下是主函数
void main(){
void changedata(int);
void resetdata(int);
int checkdata(int);
void showdata();

i=0;
char flag='Y';

showdata();

printf("各种资源的总数量为:\n");
printf("资源A:10,资源B:5,资源C:7 \n");

while(flag=='Y'||flag=='y')
{
//i=-1;
//while(i<0||i>=M)
//{
printf("请输入需申请资源的进程号(从0到");
printf("%d",M-1);
printf(",否则重新输入!):");
scanf("%d",&i);
if(i<0||i>=M)printf("输入的进程号不存在,重新输入!\n");

printf("请输入进程%d申请的资源数:\n",i);
for (j=0;j<N;j++)
{
printf("输入资源%d:\n",j);
scanf("%d",&Request[j]);
}

for (j=0;j<N;j++)
{
if(Request[j]>Need[i][j]) //银行家算法第一步
{
printf("进程%d申请的资源数大于进程还需要第%d类资源的资源量!申请不合理!请重新选择!\n",i,j);
flag='N';
break;
}
else
{
if (Request[j]>Available[j]) //银行家算法第二步
{
printf("进程%d申请的资源数大于系统可用%d申请的资源数大于系统可用%d类资源的资源量!申请不合理!请重新选择!\n",i,j);
flag='N';
break;
}
}
} //for

//}

if(flag=='Y'||flag=='y')
{
changedata(i);
if(checkdata(i))
{
showdata();
}
else
{
resetdata(i);
showdata();
}
}//if

printf("\n");
printf("是否继续银行家算法,按'Y'或'y'键继续,按'N'键退出: ");
cin>>flag;

}//while

}


//以下是未进行安全检查之前对资源的分配
void changedata(int k)
{

for (j=0;j<N;j++)
{
Available[j]=Available[j]-Request[j];
Allocation[k][j]=Allocation[k][j]+Request[j];
Need[k][j]=Need[k][j]-Request[j];
}

}

//以下是对银行家算法进行检查
int checkdata(int k)
{
i=0;
k=0;
i=k;
int Work1;
int Work[N],Finish[M],temp[M];
for(i=0;i<M;i++)
Finish[i]=false;

for(j=0;j<N;j++)
{
Work[j]=Available[j];
}

while(1)
{

while(i<M)
{
for(j=0;j<N;j++)
{
Work1=Work[j];

if(Finish[i]==false&&Need[i][j]<=Work[j])
{
Work[j]=Work[j]+Allocation[i][j];
Finish[i]=true;
temp[k]=i;
k++;
}
else
{
i++;
}
}//for

}//while

if(Work1==Work[j])break;

}//while

//for(i=0;i<M;i++)
//{
if(Finish[0]==true&&Finish[1]==true&&Finish[2]==true&&Finish[3]==true&&Finish[4]==true)
{

printf("\n");
printf("经安全性检查,系统安全, 本次资源申请成功!!!\n");
printf("\n");
printf(" 本次安全序列为:");
for(i=0;i<M;i++)
{
printf("进程");
printf("%d",temp[i]);
printf("->");
return 1;
}

}
//}
// {

// }
else
{
printf("\n");
printf("系统不安全!!! 本次资源申请不成功!!!\n");
printf("\n");
return 0;
}

//}

}

//以下是进行安全检查之后对资源的重新分配
void resetdata(int k)
{
for (j=0;j<N;j++)
{
Available[j]=Available[j]+Request[j];
Allocation[k][j]=Allocation[k][j]-Request[j];
Need[k][j]=Need[k][j]+Request[j];
}

}


//以下是定义各个进程的相关信息的一个函数:

void showdata(){

printf("各种资源的最大需求量为:\n");
for(i=0;i<M;i++)
{
printf("进程P%d三种资源的最大需求量为:\n",i);
printf("%d %d %d\n",Max[i][0],Max[i][1],Max[i][2]);
}
printf("各种资源得到的分配量为:\n");
for(i=0;i<M;i++)
{
printf("进程P%d三种资源得到的分配量为:\n",i);
printf("%d %d %d\n",Allocation[i][0],Allocation[i][1],Allocation[i][2]);
}
printf("各种资源的当前需求量为:\n");
for(i=0;i<M;i++)
{
printf("进程P%d三种资源的当前需求量为:\n",i);
printf("%d %d %d\n",Need[i][0],Need[i][1],Need[i][2]);
}
printf("当前可利用资源量:\n");
printf("%d %d %d\n",Available[0],Available[1],Available[2]);

}

搜索更多相关主题的帖子: 恳求 
2007-05-31 16:22
快速回复:[求助]我的循环有问题!跳不出来,恳求各位给看看吧
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022657 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved