延迟输出

时间:2015-06-02 12:48:54

标签: c++ delay round-robin

我在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;
}

1 个答案:

答案 0 :(得分:0)

我可以看到你是Cpp的新手。这段代码有很多问题,但我不确定它们中是否存在您正在寻找的问题。 其中很少:

  • 您的表格是静态的 - &gt; int rbt[10];
    这意味着您声明长度为10的整数表(索引从0到9)。
    如果您输入n>=10,程序将超出范围而排在第16行(p[10]不存在您想要的方式)
    你应该使用std::vector,然后n的高度无关紧要。
  • 如果您输入n=1,系统将提示您输入所有变量,省略while循环并进入最后一个for循环,这会导致打印wt[1]tat[1],这些都是未初始化=&gt;垃圾印刷
  • 你应该使用像这样的循环:for (int i = 0; i < n; i++)
    为什么?因为当你声明表e.x. int tab[3]它的长度为3,您可以对这些值进行操作:tab[0], tab[1], tab[2]所以对于n=3您将访问这些确切的值并且不会得到任何垃圾。
  • (float)swt/n是C风格的投射。你不应该在Cpp中使用它,因为它的结果可能不是你怀疑的那样。使用std::static_cast<float>(swt / n)

这只是冰山一角。您的代码很难阅读,如果没有您告诉它应该做什么,我们无法推断出的目标以及不正确的