用于循环初始化有两种不同的变量类型

时间:2015-02-27 10:48:07

标签: c++ for-loop initialization

我可以在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,有没有办法实现呢?

6 个答案:

答案 0 :(得分:2)

无法在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;
}

}

所以这就像你希望循环行为一样。

答案 1 :(得分:1)

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

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

OR定义循环外的类型并在循环中初始化值,如:

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

答案 2 :(得分:1)

为什么不尝试

#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;
}

希望这是你想要的:)

答案 3 :(得分:1)

你要做的就是这样,

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

现在,回答你的问题,

  

问:为什么我无法初始化两个不同类型的变量?

     

A ::因为,它的&#39;语法错误。

     

Q ::有没有办法实现这个目标?

     

A ::绝对不是。

答案 4 :(得分:0)

你不能在同一个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

答案 5 :(得分:0)

  

有没有办法实现这个目标?

使用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;
}