【问题标题】:Infinite for loop? [closed]无限循环? [关闭]
【发布时间】:2014-01-28 15:30:08
【问题描述】:

这是我在我的 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
}

任何帮助将不胜感激 =)

【问题讨论】:

  • 对不起,我的意思是 while 循环。傻我。 =)
  • 您使用 = 而不是 == 的简单错字。关闭原因现在包括simple typo,投票关闭。
  • 如果 (i = 0) 你肯定是指如果 (i == 0) 确实
  • 按照老师的建议去做,并始终在启用警告的情况下进行编译。
  • 现在Yoda condition 你将使用。

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


【解决方案1】:

有趣的是,您的程序陷入了无限循环,因为控制变量 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

首先在这个语句中i被设置为0

    if (i = 0)

但是由于表达式等于0,所以这个if的复合语句永远不会被执行。

然后在下一条语句中将 i 设置为 1

    else if (i = 1)

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

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

【讨论】:

    【解决方案2】:

    如果你的 if 语句看起来不对,你应该使用==,而不是=

    例如

    if (i = 0) 应该是if (i == 0)

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

    【讨论】:

    • 你是救生员!
    • 没有问题,如果您对它感到满意,请打勾:-)
    • 改变主意。程序现在没有响应 (n)...
    • 这是令人担忧的......它做了它应该做的事情,然后它崩溃了......
    • 那绝对不要打勾。我关于 if 的陈述是正确的:-)
    【解决方案3】:

    据我所知,从技术上讲,您没有编写“for”循环,而是编写了带有计数器的 while 循环。看起来您希望它迭代 15 次,您可以替换这两行:

    int i = 0; 而 (i

    用这一行:

    for (int i=0; i

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

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

    【讨论】:

      【解决方案4】:

      你应该有一个你没有读过的编译警告,告诉你在你的 if 语句中做赋值。

      if( i = 0)
      

      应该是

      if( i == 0)
      

      【讨论】:

        【解决方案5】:

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

        if (i == 0)
        

        【讨论】:

        • 每个人都已经回答过了:D
        猜你喜欢
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 2020-04-26
        • 2016-07-12
        • 2017-05-19
        • 1970-01-01
        相关资源
        最近更新 更多