2014-01-09 355 views
0

這裏是我在我的C++程序中使用的循環,它無限重複,我無法弄清楚爲什麼。 (環路包含一個名爲「initialiseTaxis」法內無限循環?

這裏的整個事情:

void initialiseTaxis (taxiDetails allTaxiDetails[14])//Initialise array of taxis 
{int i = 0; 
while (i < 15) 
{ 


    if (i = 0) 
     allTaxiDetails[i].taxiDriverSurname = "Downing"; 
    else if (i = 1) 
     allTaxiDetails[i].taxiDriverSurname = "Gilbert"; 
    else if (i = 2) 
     allTaxiDetails[i].taxiDriverSurname = "Downey"; 
    else if (i = 3) 
     allTaxiDetails[i].taxiDriverSurname = "Potter"; 
    else if (i = 4) 
     allTaxiDetails[i].taxiDriverSurname = "Elric"; 
    else if (i = 5) 
     allTaxiDetails[i].taxiDriverSurname = "Rockbell"; 
    else if (i = 6) 
     allTaxiDetails[i].taxiDriverSurname = "Tate"; 
    else if (i = 7) 
     allTaxiDetails[i].taxiDriverSurname = "Pratt"; 
    else if (i = 8) 
     allTaxiDetails[i].taxiDriverSurname = "Mansfield"; 
    else if (i = 9) 
     allTaxiDetails[i].taxiDriverSurname = "Hopps"; 
    else if (i = 10) 
     allTaxiDetails[i].taxiDriverSurname = "Willaker"; 
    else if (i = 11) 
     allTaxiDetails[i].taxiDriverSurname = "Singer"; 
    else if (i = 12) 
     allTaxiDetails[i].taxiDriverSurname = "O'Connoly"; 
    else if (i = 13) 
     allTaxiDetails[i].taxiDriverSurname = "McKay"; 
    else if (i = 14) 
     allTaxiDetails[i].taxiDriverSurname = "Spriggs"; 


    if (i == 13 || i == 1) // initialises wheelchair access (1 7 seat wheelchair, 1 5 seat wheelchair) 
    allTaxiDetails[i].WheelChairAccessibleVehicle = true; 
    else 
    allTaxiDetails[i].WheelChairAccessibleVehicle = false; 


    allTaxiDetails[i].fareDetailsForTaxi.bookingID = "0"; 
    allTaxiDetails[i].fareDetailsForTaxi.costOfCurrentFare = 0; 
    allTaxiDetails[i].fareDetailsForTaxi.overAllFareDetails = 0; 
    allTaxiDetails[i].fareDetailsForTaxi.taxiAvaliable = false; 

    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.customerCoordinates = 0; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.customerName = "Null"; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.customerOnRoute= false; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.customerPhoneNumber = "00000000000"; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.dropOffCoordinates = 0; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.dropOffLocationName = "Null"; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.nameOfLocation = "Null"; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.seatingRequirement = 5; 
    allTaxiDetails[i].fareDetailsForTaxi.currentCustomerDetails.wheelchairAccessYesOrNo = false; 
    if (i != 13 || i!= 14) //Initialises number of seats with 2 seven seater cars 
    {allTaxiDetails[i].numberOfSeats = 5;} 
    else 
    {allTaxiDetails[i].numberOfSeats = 7;} 

    allTaxiDetails[i].taxiID = (i + 1); 
    allTaxiDetails[i].taxiAvaliable = true; 
    allTaxiDetails[i].taxiContainsCustomerYesNo = false; 
    allTaxiDetails[i].taxiCoordinates = 0; 
    allTaxiDetails[i].taxiRank = "Train Station"; 
    cout << allTaxiDetails[i].taxiDriverSurname; 
    i++; 
} //Initialise Taxis Method 
} 

任何幫助,將不勝感激=)

+0

對不起,我是說while while循環。 傻了。 =) – user3163612

+1

簡單的錯字你正在使用'='而不是'=='。現在密切的原因包括'簡單的錯字',投票結束。 –

+0

if(i = 0)你肯定意味着如果(i == 0)在行動 –

回答

5

你的if語句看起來了,你應該使用==,而不是=

例如

if (i = 0)應該是if (i == 0)

陣列被傳遞中也應是尺寸爲15的,而不是14。這只是從0開始。

+0

你是一個拯救生命的人! – user3163612

+0

沒有probs,給我一個勾號,如果你對它感到滿意:-) – splrs

+0

改變主意。 該程序現在不響應(n)... – user3163612

0

你如果元素的索引()函數只具有一個=,應該有== ,如:

if (i == 0) 
+0

並且大家已經回答了:D – mkabanen

0

你應該有一個編譯警告,你沒有閱讀,告訴你你在做if語句中的任務。

if(i = 0) 

應該

if(i == 0) 
0

從我所看到的,你在技術上已經不是一個「for」循環寫,但有一個櫃檯while循環。它看起來像你想它迭代15次,你可以取代這兩行:

int i = 0; 而(ⅰ< 15)

與此行:

對(INT I = 0;我< 15;我++)

創建真正的 「for」 循環。我不明白爲什麼你當前的設置不起作用,但由於它不是,請嘗試我的建議。當然,確保「i」被調用的唯一時間是作爲循環的索引讀取的。

編輯:上面的答案是正確的,使用的是當你想「==」比較運算符「=」賦值操作符

0

很有趣的是,你的程序被陷入無限循環,由於事實是控制變量i總是被設置爲1的循環體內部的獨立你的最後一句話i++;

while (i < 15) 
{ 
    if (i = 0) 
     allTaxiDetails[i].taxiDriverSurname = "Downing"; 
    else if (i = 1) 
     allTaxiDetails[i].taxiDriverSurname = "Gilbert"; 

    // other stiff 

    i++; 
} //Initialise Taxis Method 

的起初,我在此聲明

if (i = 0) 
設置爲

但是因爲表達式等於0,所以這個if的複合語句將永遠不會執行。

然後我將在下一語句

else if (i = 1) 

作爲表達設置爲1是不等於0,那麼這個否則-如果將被執行的複合語句。同時所有其他if語句都將被忽略。

在循環結束時,你增加i。它變成等於2.但是在下一次迭代中,由於第一條語句,如果我設置爲0並且全部重複一次。:)