0

2 つの文字列配列を比較しようとしています。if ステートメント内の while ループに到達するたびに、無限ループに陥ります。これは、ループ内にイテレーターがあるにもかかわらず、インクリメントされないためです。cout<< finder;ファインダーが何であるかを確認するためだけにループを使用していますが、ゼロを超えることはありません。誰かが助けてくれれば、本当に感謝しています。

if (memory[p] == "J")
    {
        if (is_number(memory[p+1]))
        {
            worker = atoi(memory[p+1].c_str());
            p = worker;
            continue;
        }
        else
        {
            int finder = 0;
            while (memory[p+1] != Symtablelab[finder])
            {
                cout << finder;
                finder = finder + 1;
            }

            if (memory[p+1] == Symtablelab[finder])
            {
                int k = Symtablepos[finder];
                worker = atoi(memory[k].c_str());

                p = worker;
                continue;
            }
        }
    }
4

2 に答える 2

2

あなたはfinder、ゼロを超えることは決してないと言いました。finder = 0 をまったく出力しますか? もしそうなら、それは意味します

memory[p+1] = Symtablelab[1]

最初の繰り返しの直後なので、while ループは終了しfinder、1 に固執します。

EDIT あなたが言うなら、それfinder = 0はwhileステートメントの中に連続して印刷されます。おそらくif (memory[p] == "J")、外側のforまたはwhile(ループ)ステートメントの中にあります。

于 2012-09-17T04:53:17.370 に答える
1

ファインダーを継続的に印刷していて、それが 0 の場合、投稿したこのコード スニペット全体が、投稿していない while ステートメントで囲まれているかどうかを確認する必要があります。あなたが投稿したステートメントに含まれるwhileループが、無限ループに陥るループである場合、インクリメントファインダーではないということはまったく意味がありません。

または、Symtablelab が '[' ']' 演算子をオーバーライドした可能性もあります。これらのことがどちらも真実でない場合、信じられないほど不安定なことが起こっています。

于 2012-09-17T05:20:48.693 に答える