0

毎回同じなのでランダムではありませんが、

#include<iostream>
using namespace std;
int main()
{
    char box[10][10];
    for(int i=-1;i<11;i++)
    {
        cout<<"---------------------"<<endl<<"|";
        for(int j=0;j<10;j++)
        {
            cout<<box[j][i]<<"|";
        }
        cout<<endl;
    }
    intx;cin>>x;
    return 0;
}

一連の国際文字を出力します(まあ、それらのすべてがそれ自体「国際」であるわけではありませんが、円周率やスペイン語の逆疑問符などを取得します)。とにかく、これはプログラムが初期化されていない文字にアクセスするためであることはわかっていますが、特定の値が特定のシンボルを作成するのはなぜですか、シンボルのASCII値は何ですか(ASCII値がある場合)、グリッチなしでシンボルを取得するにはどうすればよいですか私のプログラム?

4

5 に答える 5

3

あなたのループオーバー i は意味がありません...

for(int i=-1;i<11;i++)

ここでボックスを参照すると、無効な 2 つのインデックス (-1 と 10) にヒットします。

cout<<box[j][i]<<"|";

他のループと同様に、0 から < 10 にする必要があります。

また、ボックスの内容を何にも初期化していないため、初期化されていないメモリを出力しています。何かを取り出す前に、何かを「箱」に入れなければなりません。

シンボル自体はおそらく拡張 ASCII であり、拡張 ASCII テーブルから取得できます。 これはグーグルで最初に出てきました。たとえば、次のことができます。

cout << "My extended ascii character is: " << (char)162 << endl;

狂気の国際的な o を取得します。

于 2009-05-23T19:48:43.580 に答える
2

同じ理由で

#include <iostream>
using namespace std;
int main()
{
   int x;
   cout << x;
}

ランダムな値を表示します。初期化されていない変数 (または配列) にはガベージが含まれています。

于 2009-05-23T19:51:05.727 に答える
0

プログラムによって表示される記号は、以下によって異なります。

  • 初期化されていない変数にたまたま含まれている内容、および
  • コンピュータのロケールまたはプレゼンテーションで使用されるエンコーディング。

Unicode参照は、特定の記号を表示するために必要なコードを識別するための最良のソースになる可能性があります。

ユーザーがデフォルトで選択されている同じエンコーディング(または正しい記号のフォント)を持っていない可能性があることを考慮してください。現在のロケールを確認するか、出力に固有のロケールを強制して、出力が希望どおりにレンダリングされるようにする必要があります。

于 2009-05-23T20:06:48.207 に答える
0

for(int i=-1;i<11;i++)

その行は疑わしいです。-1から10? 0 ~ 9 である必要があります。

于 2009-05-23T19:50:08.787 に答える
0

アスキーコードは

(int)(box[j][i])

char0 から 255 までのコードを持つ ASCII 文字である通常の s を印刷するだけです。 wchar_ts を印刷すると、同じメモリが他の文字として解釈されます。

ループは [0; にある必要があります。10[ ではない [-1; 11[

于 2009-05-23T19:51:42.450 に答える