我想写一个 for 循环,如下所示;在初始化部分,我想声明不同类型的变量:
for (int loop=0, long result = 1; loop <= 10 ; loop++, result *= 2 )
{
cout << "2^"<<loop<<"=" << result<<endl;
}
但它给出错误,意味着它是不允许的。有什么解决方案吗?
答案 0 :(得分:21)
不要写这样的代码。这是速度碰撞代码,有人会在某一天阅读这篇文章然后去Whoa!并失去5分钟的生命,试图找出你为什么这样做。那是5分钟他永远不会回来的,你没理由欠他的。
如果限制结果的范围非常重要,那么请使用额外的大括号:
{
long result = 1;
for (int loop = 0; loop <= 10; loop++)
{
cout << "2^" << loop << "=" << result << endl;
result *= 2;
}
}
现在把它放在最上面,你不仅要写可读代码,还要写可重复使用的代码:
void printPowersOfTwo(int from, int to)
答案 1 :(得分:6)
就像你试过的那样:
int loop=0, long result = 1;
其他任何地方。
你可以这样做:
for (struct { int loop; long result; } vars = { 0, 1};
但不要
答案 2 :(得分:3)
您可以在for循环声明部分声明多个变量,只要它们是单个基本类型(即您可以在单个声明中声明int
和int*
,但不能int
和long
)。
答案 3 :(得分:3)
C ++不允许这样做。这就是它给出错误的原因。
顺便说一句,您可以通过在函数本身内部定义 local struct
来实现此目的,
struct local {int loop; long result; };
for (local power = {0,1}; power.loop <= 10 ; power.loop++, power.result *= 2 )
{
cout << 2 <<"^" <<power.loop << "=" << power.result << endl;
}
在ideone:http://www.ideone.com/ELT4a
处运行代码或者您只需在struct
循环中定义for
,就像这样,
for ( struct {int loop; long result; } power = {0,1}; power.loop <= 10 ; power.loop++, power.result *= 2 )
{
cout << 2 <<"^" <<power.loop << "=" << power.result << endl;
}
答案 4 :(得分:3)
这样的事情会比尝试将所有循环体填充到一行中更加惯用。如果你使用相当正常的风格,任何后来必须整理你的代码的人都会很感激。调用循环索引变量“循环”实际上并不比调用它“i”更具表现力,并且在for循环中使用&lt; =而不是&lt;在我的经历中,这当然不常见。
long result=1;
for (int i=0; i<11; i++)
{
std::cout << "2^" << i << " = " << result << std::endl;
result *= 2;
}
答案 5 :(得分:2)
你必须写为 -
int loop;
long result;
for (loop = 0, result = 1; loop <= 10; loop++, result *= 2) {
cout << 2 <<"^" <<power.loop << "=" << power.result << endl;
}
你不能在c ++中的循环中编写声明部分;
答案 6 :(得分:0)
如果这是初始化部分,你可以这样做。
for (int loop=0; loop <= 10 ; loop++, result *= 2 )
{
static long result = 1;
cout << "2^"<<loop<<"=" << result<<endl;
}
作为警告,如果你两次打电话,这可能是一个问题。
我最近把它抽出来了
for (double tempTemp = 0.0,i=0;tempTemp >=targetTemp;i++)
{
Sleep(100);
deviceSafeCall(IL_GetFloat(myHandle,L"SensorTemperature",&tempTemp));
cout << ".";
static int fancy = 0;
if (++fancy%10==0)
{
cout <<tempTemp <<endl;
}
}