搜索floop工作的第一次通过但不是第二次

时间:2015-02-18 05:27:18

标签: c++ loops

我使用此功能来搜索用户输入的数字x。 想法是用户在马拉松中输入跑步者的号码,并且程序输出该号码所属的跑步者的信息。 如果用户输入0,循环也应该结束。

问题在于它既可以在第一次而不是第二次工作,或者根本不工作,只显示runner[0]的信息。

这是代码(抱歉西班牙语)

void search(race *runner){

    int flag = 1;
    int x;
    while (flag = 1){

        cout << "Porfavor entre el numero del corredor, si desea terminar la busqueda entre el numero 0 "<<endl;
        cin >> x;
        cout << endl;
        for (int i = 0; i < size-1; i++){

            if (x = runner[i].number)
                cout << "El corredor que usted busca es " <<
                runner[i].name << " con el numero " << runner[i].number<<endl;

            if (x = 0)
                flag = 0;

            }

        }


    }

3 个答案:

答案 0 :(得分:0)

除了改变

的明显修正
while (flag = 1){

while (flag == 1){
      //    ^^^

并改变

        if (x = runner[i].number)

        if (x == runner[i].number)
        //    ^^^

您可以通过移动检查x是否等于0的位置来避免代码中的一些不必要的工作。

// while (flag = 1){
// This is also wrong.

while (flag == 1){

   cout << "Porfavor entre el numero del corredor, si desea terminar la busqueda entre el numero 0 "<<endl;
   cin >> x;
   cout << endl;
   if ( x == 0 )
   {
      flag = 0;
      // No need to go through the loop for this case.
   }
   else
   {
      for (int i = 0; i < size-1; i++){

         if (x == runner[i].number)
            cout << "El corredor que usted busca es " <<
               runner[i].name << " con el numero " << runner[i].number<<endl;
      }
   }
}

答案 1 :(得分:0)

现在它应该有效,实际上你会对===感到困惑,首先要研究如何比较两个元素。

void search(race *runner){

    int flag = 1;
    int x;
    while (flag == 1){

        cout << "Porfavor entre el numero del corredor, si desea terminar la busqueda entre el numero 0 "<<endl;
        cin >> x;
        cout << endl;
        for (int i = 0; i < size-1; i++){

            if (x == runner[i].number)
                cout << "El corredor que usted busca es " <<
                runner[i].name << " con el numero " << runner[i].number<<endl;

            if (x == 0)
                flag = 0;

            }
        }
    }

答案 2 :(得分:0)

您的代码中存在一些简单的错误。您在代码中的三个位置使用=而不是==,即

while (flag = 1)

if (x = runner[i].number)

if (x = 0)

将这些更改为

while (flag == 1)

if (x == runner[i].number)

if (x == 0)

您正在做的是,您正在为它们分配这些值而不是检查是否相等。这是许多人犯的常见错误,并且可能变得非常混乱,有时可能会导致无限循环。因此,您应该在开始时检查这些错误。

希望这能解决你的问题。