-1

エラーなしでコンパイルされるこの C++ コードを書きましたが、バグがありました。どうすればこれを機能させることができますか?

int main() {
int a=0;
for(a=0;a<=9;a+=1)
{
cout<<a<<"\n";
char ssss[] = "hello";
ssss[1]=a;
cout<<ssss<<"\n";
}
return 0;
}

現在の出力は次のとおりです。

ここに画像の説明を入力

4

2 に答える 2

3

仕様を満たしていない場合にのみバグが発生します。そして、あなたはそれがどのように振る舞うべきかについての仕様を提供していないので、私たちは推測しなければなりません。

文字ssss[1]をからの整数値に設定0する9と、それはからの文字ではなく、代わりに(少なくともASCIIでは)、水平タブ文字のようないくつかの制御文字になります。'0''9'9

これにより、出力が奇妙に見える可能性があります。

hこれは、0の場合、 (0は文字列ターミネータであるため)ちょうど得られるという点ではっきりとわかります。

1から4および6の場合、16進コードが出力されます。5はENQキャラクターなので、それが何をしているのかわかりません。7はASCIIベル文字なので、ビープ音が聞こえることを願っています。8はバックスペースでllo、最初のを上書きしますh。9は水平タブであり、次のタブストップでさらに出力を開始します。

までの文字 '0'を使用する場合は、ループを次のよう'9'に変更します。for

for (a = '0'; a <= '9'; a++)

次のプログラムに従って:

#include <iostream>

int main (void) {
    char str[] = "hello";
    for (int code = '0'; code <= '9'; code++) {
        str[1] = code;
        std::cout << code << ": " << str << '\n';
    }
    return 0;
}

出力:

48: h0llo
49: h1llo
50: h2llo
51: h3llo
52: h4llo
53: h5llo
54: h6llo
55: h7llo
56: h8llo
57: h9llo
于 2013-03-06T04:45:05.933 に答える
1

これが実行され、次のような出力が得られます

0 h 
1 hllo 
2 hllo 
3 hllo 
4 hllo 
5 hllo 
6 hllo 
7 hllo 
8 hllo 
9 h   llo

これは、a =0 の場合、最後に null 文字が割り当てられ、出力が h のみになるためです。9 の場合、\t9 の ASCII はタブに相当するため、その場所に (タブ) を配置します。

于 2013-03-06T04:49:25.343 に答える