0

私はいくつかのコードを書きました。ここにそのスニペットがあります:

int num[8],n=0;
for (n = 0; n<8; n++)
{
    char temp = binnum[n];
    num[n] = atoi(&temp);
    cout << num[n];
}

エラーは発生しませんが、警告が表示されます。C++で実行すると、Run Time Check Failure - The variable n is being used without being initialized. その後、それ以上実行されず、プログラムが終了します。このエラーを無視する方法はありますか? を初期化するnと、間違った答えが返されるためです。たとえば、答えが 101011 の場合、10101100 になりますが、これは間違っています。

4

6 に答える 6

2

@anthares が指摘したようにnを初期化し、ループの最後でインクリメントして、ループが実際に機能するようにします。

int number[8];
int n = 0;
do
{
    char temp = binnum[n];
    number[n] = atoi(&temp);
    cout << number[n];
    n++;
} while (n<8);
于 2011-02-07T15:12:22.473 に答える
1

あなたの主な問題 (すべての編集後) はatoi、null で終わる文字配列 (C スタイルの文字列) を取ることです。単一の char 変数のアドレスは、C スタイルの文字列を作成しません。

範囲 ['0'...'9'] の 1 文字を対応する数値に変換するには、次のようにします。

number[i] = temp - '0';

temp に数字が含まれていることを確認した可能性があります。

于 2011-02-07T16:53:19.010 に答える
0

int number [8], n=0たとえば、変数 n を使用する前に値を指定します。それ以外の場合、 n の値と、サイクルで実行する反復回数は「定義されていない動作」です。

また、書かれているように、 n の値を決して変更しないため、ループは永遠に続きます...

于 2011-02-07T15:10:16.790 に答える
0

値が割り当てられる前に n を使用しています。コードで n を参照する前に、 n が初期化されていることを確認する必要があります (おそらく 0 に)。このエラーを無視したくありません。

次のようなことを試してください:

const int count = 8;
int number[count];
    for (int i=0; i < count; i++)
    {
        char temp = binnum[i];
        number[i] = atoi(&temp);
        cout << number[i];
    }
于 2011-02-07T15:11:08.670 に答える
0

何?に値を割り当てることはありませんn
たとえば、の値int number[8],n=0;を決して変更しない場合でもn、無限ループになってしまいます。

于 2011-02-07T15:11:56.530 に答える
0

実際に n を初期化する必要があります (さらに言えば、それをインクリメントすることもできます)。
アプリケーションのデバッグ ビルドを実行している可能性があります。この場合、変数はおそらく常に同じ値で初期化されます。これが、期待する結果が表示される理由です。純粋に偶然に正しく動作するようです。 アプリケーションがリリース モードでビルドされるとすぐに、プログラムが実行されるたびに異なる値になる可能性があるため、出力は予測できなくなります。これは、プログラムに未定義の動作がある場合に発生します。
n

于 2011-02-07T15:20:16.783 に答える