【问题标题】:For loop initialization with two different variable type [duplicate]对于具有两种不同变量类型的循环初始化[重复]
【发布时间】:2015-02-27 10:48:07
【问题描述】:

我可以像这样在for初始化中初始化两个int变量:

#include <iostream>
using namespace std;

int main() {
    for(int i = 0, j=i+1; i<4; i++, j++){
        cout << "i: " << i << ", j: " << j << endl;
    }
    return 0;
}

然后打印出来:

i: 0, j: 1
i: 1, j: 2
i: 2, j: 3
i: 3, j: 4

如何初始化两个不同类型的变量,例如 int 和 float,像这样?

#include <iostream>
using namespace std;

int main() {
    for(int i = 0, float j=i+1; i<4; i++, j++){
        cout << "i: " << i << ", j: " << j << endl;
    }
    return 0;
}

最后一个代码返回给我syntax error,有没有办法做到这一点?

【问题讨论】:

  • 哪个编译器给你sintax错误?似乎编译器开发人员应该更擅长拼写。

标签: c++ for-loop initialization


【解决方案1】:

不能在for循环中声明和初始化多种类型的变量。

但您可以分配和使用多个类型变量,如下例所示:

#include <iostream>
using namespace std;

int main() {
    int i;
    float j;
    for (i=0, j=i+1 ; i < 4 ; i++, j++) {
        cout << "i: " << i << ", j: " << j << endl;
    }
    return 0;
}

}

所以这将按照你希望你的循环运行。

【讨论】:

  • 你的代码有语法错误,你知道在哪里吗?
  • 有一个 ;在 for 循环结束时
【解决方案2】:

您不能在同一个 for 循环中定义两种不同的类型。在循环之外定义其中之一:

float j = 1;
for(int i = 0; i<4; i++, j++){

或在循环外定义类型并在循环内初始化值,例如:

float j;
int i;
for(i = 0, j=1; i<4; i++, j++){

【讨论】:

    【解决方案3】:

    为什么不试试

    #include <iostream>
    using namespace std;
    
    int main() {
        float j = 1;
        for (int i = 0 ; i < 4 ; i++, j++){
            cout << "i: " << i << ", j: " << j << endl;
        }
        return 0;
    }
    

    只需在 for 循环之外定义浮点数。或者,按照其他人的建议

    #include <iostream>
    using namespace std;
    
    int main() {
        float j;
        int i
        for (i = 0, j = 1 ; i < 4 ; i++, j++){
            cout << "i: " << i << ", j: " << j << endl;
        }
        return 0;
    }
    

    希望这是你想要的:)

    【讨论】:

      【解决方案4】:

      你想要做的也是这样,

      int main()
      {
       int i, float j ; // which is obviously Syntax error
      }
      

      现在,来回答你的问题,

      Q::为什么我不能初始化两个不同类型的变量?

      A::因为,它是一个语法错误。

      Q::有没有办法做到这一点?

      A::绝对不是。

      【讨论】:

        【解决方案5】:

        你不能在同一个for循环中定义两种不同的类型,你可以将类型的声明移到循环之外,或者使用std::pair(或std::tuple)将你的类型聚合为一个:

        //#include <utility>
        
        for (std::pair<int, float> p = {0, 1.f}; p.first < 4; p.first++, p.second++){
            std::cout << "i: " << p.first << ", j: " << p.second << std::endl;
        }
        

        Live demo

        【讨论】:

          【解决方案6】:

          有没有办法做到这一点?

          使用struct

          for (struct {int i; float j;} x = {0, 1}; x.i < 4; x.i++, x.j++) {
              cout << "x.i: " << x.i << ", x.j: " << x.j << endl;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-26
            • 1970-01-01
            • 2019-01-24
            • 1970-01-01
            • 2015-03-10
            • 2012-01-28
            • 1970-01-01
            • 2018-12-15
            相关资源
            最近更新 更多