结构数组无法读取分配给它们的interger c ++

时间:2014-10-04 21:06:42

标签: c++ arrays struct

我正在尝试为Arrival,BurstTime和IOTime数组赋值。当我没有到达时它工作得很好[9]。但是,尝试将多个int传递给变量不起作用。我得到-86638 ***号码。我一直试图找到答案,没有运气。

这是我的结构。

struct ReadyQueue
{
    //static const int MAX_NUMBER = 10;
    int ArrivalTime[10];
    int  BurstTime[10];
    int IOTime[10];
    std::string Name;

};

和我的变量

P[0].ArrivalTime[10] =       0, 98, 221, 327, 423, 530, 628, 719, 788 ;
P[1].ArrivalTime[8]         = 17, 116, 208, 320, 437, 554, 665, 754 ;               // P2
P[2].ArrivalTime[7]         = 27, 125, 238, 364, 468, 579, 680;                     // P3
P[3].ArrivalTime[8]         = 45, 155, 276, 392, 515, 642, 739, 820 ;               // P4
P[4].ArrivalTime[10]        = 62, 186, 343, 489, 603, 715, 807, 887, 952, 997;      // P5
P[5].ArrivalTime[7]         = 67, 174, 262, 348, 446, 566, 654;                     // P6
P[6].ArrivalTime[9]         = 77, 148, 216, 302, 359, 461, 546, 622, 697;           // P7
P[7].ArrivalTime[8]         = 83, 196, 306, 409, 499, 608, 702, 773 ;               // P8
P[8].ArrivalTime[9]         = 92, 192, 296, 386, 492, 599, 692, 734, 803;           // P9


P[0].BurstTime[8]           = 17 , 18, 17, 16, 14, 16, 14, 15, 15;
P[0].IOTime[8]              = 24, 73, 31, 27, 33, 43, 64, 19 ;

P[1].BurstTime[8]           = 10, 9, 8, 7, 9, 12, 15, 19 ;
P[1].IOTime[7]              = 31, 35, 42, 43, 47, 43, 51 ;

P[2].IOTime[6]              = 51, 53, 61, 31, 43, 31 ;
P[2].BurstTime[7]           = 18, 23, 24, 22, 21, 20, 12 ;

P[3].BurstTime[8]           = 17, 19, 20, 17, 15, 12, 15, 14 ;
P[3].IOTime[7]              = 42, 55, 54, 52, 67, 72, 66 ;

P[4].BurstTime[10]          = 5, 6, 5, 3, 5, 4, 3, 4, 3, 5 ;
P[4].IOTime[9]              = 61, 82, 71, 61, 62, 51, 77, 61, 42 ;

P[5].BurstTime[7]           = 10, 12, 14, 11, 15, 13, 11 ;
P[5].IOTime[6]              = 35, 41, 33, 32, 41, 29 ;

P[6].BurstTime[7]           = 6, 7, 5, 4, 5, 7, 8, 6, 5 ;
P[6].IOTime[8]              = 18, 21, 19, 16, 29, 21, 22, 24 ;

P[7].BurstTime[8]           = 9, 12, 14, 14, 16, 14, 13, 15 ;
P[7].IOTime[7]              = 52, 42, 31, 21, 43, 31, 32 ;

P[8].BurstTime[9]           = 6, 4, 6, 6, 7, 4, 5, 5, 4 ;
P[8].BurstTime[8]           = 35, 41, 33, 32, 41, 29, 16, 22 ;

非常感谢

5 个答案:

答案 0 :(得分:2)

我想澄清这些作业的作用,因为我看到了一些错误的答案。 让我们看一个例子:

P[0].ArrivalTime[10] =       0, 98, 221, 327, 423, 530, 628, 719, 788 ;

首先,该语句在ArrivalTime数组的0元素中分配eleventh,我认为你不想这样做,因为ArrivalTime [9]是最后一个元素。

其次,逗号运算符计算第一个操作数,丢弃结果,然后计算第二个操作数并返回其值。在示例中,您可以认为此评估返回788,但assign运算符的优先级高于comma,因此,语句将按如下方式进行评估:

((P[0].ArrivalTime[10] =       0), 98, 221, 327, 423, 530, 628, 719, 788 ;

答案 1 :(得分:1)

请注意我的回答包含一个错误,我更正了错误:等于运算符的优先级高于逗号运算符(它可能仍然包含它的痕迹)

这不是将数组赋值给变量的方法 你在做什么只是:
788 0 分配给p[0].ArrivalTime[10] //the 11th element of p[0],它位于阵列的保留空间之外
因为逗号运算符的作用是它从左到右计算每一个并返回最后一个值:例如:

int i=0,j;
j=i++,(i+=5),i;    //j=0 and i=6 //because it is in fact (j=i++),(i+=5),i;
j=(i++,(i+=5),i);    //j=6 and i=6

您要做的是将p[0].arrivalTime分配给10的数组。您应该这样做:

P[0].ArrivalTime[0] = 0 ;
P[0].ArrivalTime[1] = 98 ;
...
P[0].ArrivalTime[9] = 788 ;

我不知道在声明

之后将数组分配给数组变量的任何方法

答案 2 :(得分:1)

改变这个:

struct ReadyQueue
{
    //static const int MAX_NUMBER = 10;
    int ArrivalTime[10];
    int  BurstTime[10];
    int IOTime[10];
    std::string Name;

};

到此:

struct Item
{
    int ArrivalTime;
    int  BurstTime;
    int IOTime;
};

struct Ready_queue
{
    string name;
    queue<Item> items;
};

其中queuestd::queue

如果这不符合您的更高级别的目的,那么类似的东西就适合(无法解释的)目的。

重点是逻辑结构的反转,将相关数据放在一起。


请注意,例如x = 6, 4, 6, 6, 7, 4, 5, 5, 4 ;被解析为(x = 6), 4, 6, 6, 7, 4, 5, 5, 4 ;,因此仅相当于= 6;。赋值后的longwinded表达式使用逗号运算符,它以普通读取顺序计算表达式,生成最后一个的值。由于解析,最终值也被丢弃。

答案 3 :(得分:0)

你不能在c / c ++中对这样的数组进行赋值。您可以使用与{}类似的语法来初始化数组,但它不会对您想要在此处执行的操作起作用。您可以使用memcpy将数组复制到结构中的内存位置。

memcpy( p[0].ArrivalTime,
    (const int[9]) {0, 98, 221, 327, 423, 530, 628, 719, 788},
    sizeof(int [9])
);

答案 4 :(得分:0)

请注意,逗号是一个运算符,它计算表达式列表并返回最后一个表达式的值。这意味着

P[0].ArrivalTime[10] =       0, 98, 221, 327, 423, 530, 628, 719, 788 ;

0分配给名为ArrivalTime的数组的索引10处的值,并忽略列表的其余部分。