我正在尝试为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 ;
非常感谢
答案 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;
};
其中queue
为std::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处的值,并忽略列表的其余部分。