4

C ++では、FOR内の変数で宣言できることを知っています。例:

for(int i=0; i<10; i++)

for内で別の変数を宣言する方法はありますか?これは私にはうまくいきません:

for(int i=0, char Ch='J'; i<10; i++)
4

8 に答える 8

9

を使用できますstd::pair

for (std::pair<int, char> p(0, 'j'); p.first < 10; p.first++)
{
}
于 2012-04-03T12:01:37.770 に答える
8

簡単な解決策は、 のすぐ外側にスコープを作成することforです。

{
    char Ch = 'j';

    for (int i = 0; i < 10; i++)
    {
    }
}
于 2012-04-03T12:00:04.997 に答える
5

いいえ、あなたがすることはできません。次の方法で実行できます。

char Ch='J';
for(int i=0; i<10; i++)

問題は、異なる型の変数を宣言するには、2 つのステートメントを区切るためにセミコロン ( ) が必要なことです;。コンマ ( ,) は同じ型の変数を宣言します。forただし、ヘッダーではセミコロンの意味が異なります。

スコープが気になる場合は、ブロックで囲むこともできます。

于 2012-04-03T11:59:47.213 に答える
4

答えはノーです。foo ループ内で宣言できる型は 1 つだけです。ただし、型は構造体になる可能性があるため、制限には奇妙なハックがあります。

int main()
{
    for (struct {int i; char c; } s = {0, 'A'};
         s.i < 26; ++s.i, ++s.c) {
            std::cout << s.c;  // prints the alphabet
         }
}

しかし、それは実際にすべきではないことです。ループの前に必要な変数を宣言するだけです:)

int main()
{
   {
    int i = 0;
    char c = 'A';

    for (; i < 10; ++i) { /* ...*/ }
   }
}

括弧の余分なセットに注意してください。名前が周囲のスコープの変数と衝突する場合は、それらを使用して変数のスコープを制限できます。

于 2012-04-03T12:25:27.797 に答える
1

はいといいえ。あなたができる間;は で何でもできる,ので、次のことが可能です:

for(int i=0, j=10; i<5; ++i,--j) { ... }

;ただし、異なるタイプの変数が必要な場合、サブ宣言を分離する必要があるため、これを行うことはできません。

C++11 auto でも役に立たないことに注意してください。

#include <iostream>

using namespace std;

int main()
{
    for(auto i=0, c = "abcd"; i<3; ++i,++c)
        cout << *c;
    cout << endl;
    return 0;
}

コンパイル エラーが発生します。

inconsistent deduction for 'auto': 'int' and then 'const char*'
于 2012-04-03T12:06:49.097 に答える
1

別の変数を宣言できますが、同じ型のみです。次のように機能します。

  for(int i=0, Ch='J'; i<10; i++)

しかし、Ch今はint.

于 2012-04-03T11:59:40.440 に答える
0

「、」を使用できます。

for(int i=0,x=0; i<x; i++)
...

int i=0 はループの外で実行されると言えます... i の定義はループに入る前に実行されます。

于 2012-04-03T11:59:26.527 に答える
0

他の変数のデータ型を再宣言することはできません。代わりにこれを試してください。

   for(int i = 0, j = 10; i < x; i++) {}
于 2012-04-03T11:59:53.950 に答える