我在c ++中编写了循环调度代码。输出有两部分,但第二部分的输出有延迟。我无法更正我的代码,请有人帮助我。代码如下:
#include<iostream>
using namespace std;
int main()
{
int x=0,rbt[10],bt[10],wt[15],tat[10],cpu=0,n,tq,p[10],st[10],i,count=0,swt=0,stat=0,temp;
float awt=0.0,atat=0.0;
cout << "\nEnter number of processes:";
cin >> n;
for(i=1;i<=n;i++)
{
cout<<"\nEnter the processID";
cin>>p[i];
cout<<"\nEnter burst time:";
cin>>bt[i];
rbt[i]=bt[i];
}
cout << "\nEnter time quantum:";
cin >> tq;
cout << "\n ProcessId\tBurst time\tRemaining burst time\tCpu Time\n";
while(count!=n-1)
{
for(i=1;i<=n;i++)
{
if(rbt[i]==0)
{
++count;
continue;
}
else if(rbt[i]>tq)
{
st[i]=rbt[i];
rbt[i]=rbt[i]-tq;
cpu=cpu+tq;
}
else
{
st[i]=rbt[i];
temp=rbt[i];
rbt[i]=0;
cpu=cpu+temp;
}
cout << p[i] << "\t\t" << st[i] << "\t\t" << rbt[i] << "\t\t\t" << cpu << "\t\t" << endl;
if(rbt[i]==0)
{
tat[i]=cpu;
wt[i]=tat[i]-bt[i];
swt=swt+wt[i];
stat=stat+tat[i];
}
}
}
cout << "\nProcessID\tBurst time\tWaiting time\tTurn around time:\n";
for(i=1;i<=n;i++)
{
cout<<p[i]<<"\t\t"<<bt[i]<<"\t\t\t"<<wt[i]<<"\t\t\t"<<tat[i]<<endl;
}
awt = (float)swt/n;
atat = (float)stat/n;
cout << "Avg wait time is\tAvg turn around time is " << awt << "\t" << atat;
return 0;
}
答案 0 :(得分:0)
我可以看到你是Cpp的新手。这段代码有很多问题,但我不确定它们中是否存在您正在寻找的问题。 其中很少:
int rbt[10];
n>=10
,程序将超出范围而排在第16行(p[10]
不存在您想要的方式)std::vector
,然后n
的高度无关紧要。n=1
,系统将提示您输入所有变量,省略while循环并进入最后一个for循环,这会导致打印wt[1]
和tat[1]
,这些都是未初始化=&gt;垃圾印刷for (int i = 0; i < n; i++)
。 int tab[3]
它的长度为3,您可以对这些值进行操作:tab[0], tab[1], tab[2]
所以对于n=3
您将访问这些确切的值并且不会得到任何垃圾。(float)swt/n
是C风格的投射。你不应该在Cpp中使用它,因为它的结果可能不是你怀疑的那样。使用std::static_cast<float>(swt / n)
。这只是冰山一角。您的代码很难阅读,如果没有您告诉它应该做什么,我们无法推断出的目标以及不正确的。