循环无限?

时间:2014-01-09 21:05:01

标签: c++ loops for-loop iteration infinite

这是我在我的c ++程序中使用的for循环,它无限重复,我无法弄清楚原因。 (循环包含在名为“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
}

非常感谢任何帮助=)

5 个答案:

答案 0 :(得分:5)

您的if语句会被关闭,您应该使用==,而不是=

e.g。

if (i = 0)应为if (i == 0)

传入的数组也应该是15,而不是14.它只是元素的索引从0开始。

答案 1 :(得分:0)

你的if()函数只有一个=,应该有==,如:

if (i == 0)

答案 2 :(得分:0)

您应该有一个编辑警告,说明您没有阅读,告诉您在if语句中进行了分配。

if( i = 0)

应该是

if( i == 0)

答案 3 :(得分:0)

从我所看到的,你在技术上没有写一个“for”循环,而是一个带有计数器的while循环。看起来你想要它迭代15次,你可以替换这两行:

int i = 0; 而(i <15)

这一行:

for(int i = 0; i&lt; 15; i ++)

创建一个真正的“for”循环。我不明白为什么你当前的设置不起作用,但既然不是,请试试我的建议。当然,确保调用唯一的“i”时间作为循环的索引。

编辑:上面的答案是正确的,当你想要“==”比较运算符时,你正在使用“=”赋值运算符

答案 4 :(得分: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

首先,我在本声明中将其设为0

    if (i = 0)

但由于表达式等于0,因此将从不执行此复合语句。

然后我在下一个声明中将其设置为1

    else if (i = 1)

由于表达式不等于0,因此将执行此else-if的复合语句。与此同时,所有其他if语句都将被忽略。

在循环结束时你增加i。它变为等于2.但是在下一次迭代中,由于第一个语句,如果i设置为0并且所有重复重复。:)