2014-10-04 33 views
-1

我試圖給Arrival,BurstTime和Iotime數組賦值。當我沒有到達時它工作得很好[9]。然而,嘗試將多個int傳入變量不起作用。我得到-86638 ***號碼。我一直在努力尋找一個爲數天的答案,沒有運氣。結構數組無法讀取分配給它們的整數C++

這是我的結構。

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

由於您使用'標準:: string',我想這是C++,而不是C.有沒有原因你不使用'std :: vector'?使用'class'而不是'struct'怎麼樣? – 2014-10-04 21:26:01

+0

順便說一下,因爲數組長度不固定,我會建議使用指針而不是數組,並使用變量來保存長度,因爲沒有其他方法可以找出c和C++中的數組長度(例如,如果所有的值必須是正數以確定數組在完成第十個元素之前完成,那麼錯誤的值就像是負值 – PhpLou 2014-10-04 21:33:00

回答

2

我想澄清這些作業的作用,因爲我看到一些錯誤的答案。 讓我們看看一個例子:

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

首先,這句話在ArrivalTime陣列的eleventh要素分配0,我不認爲你要做到這一點,由於ArrivalTime [9]是最後一個元件。

其次,逗號運算符評估第一個操作數,放棄結果,然後評估第二個操作數並返回其值。在這個例子中,你可以認爲這個評價返回788,但assign運營商有更多的優先級比comma,因此,該語句將評價是這樣的:

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

好的,這很有道理。我需要做更多的閱讀。這聽起來像常見的編程意義。謝謝大家的幫助。 – Deciantis 2014-10-07 17:08:36

0

你不能做任務到數組像這樣的C/C++。您可以使用與{}類似的語法來初始化數組,但它不適用於您想要在此處執行的操作。您可以使用memcpy將數組複製到結構中的內存位置。

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

注意,逗號是其評估表達式列表,並返回最後一個表達式的值的運算符。這意味着,

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

在名爲ArrivalTime陣列的索引10分配0到的值,並忽略該列表的其餘部分。

+2

嗨,請您看看我的答案嗎?您沒有關注運營商__assign__和__comma__。 – whoan 2014-10-05 17:49:45

+0

@ jaba10你是完全正確的!謝謝你的收穫。 – 2014-10-05 22:25:57

1

請注意,我的回答包含了一個錯誤,我糾正它:等於操作符比逗號操作符更高的優先級(它可能仍然包含了它的蹤跡)

這不是你如何分配一個數組到一個變量。
你在做什麼很簡單:
分配 到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 ; 

我不知道將數組分配給數組變量聲明之後

+0

@Cheersandhth(編輯),我的意思是,但我不知道我的權利,我一直在左邊,感謝編輯:) – PhpLou 2014-10-04 21:26:31

+1

正如我在回答中所說的,要小心操作員的優先級。例如:p [0] .ArrivalTime [10]將被分配0 – whoan 2014-10-05 17:43:41

+0

@ jaba10更正,謝謝 – PhpLou 2014-10-05 18:09:00

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;。作業之後的長時間表達式使用逗號運算符,它以普通閱讀順序評估表達式,並生成最後一個的值。由於解析也丟棄了最終值。

+0

由於優先級,實際上'= 6,4,6,6,7,4,5,5,4'是相等的到'= 6'。如果你有'=(6,4,6,7,4,5,5,4)'',那就不一樣了。 – whoan 2014-10-05 16:41:31

+0

@ jaba10:謝謝,你說得對。我正在考慮初始化,因爲這是代碼*應該*已經。 – 2014-10-05 17:01:51

+0

@ jaba10:固定。 :) – 2014-10-05 17:07:33