2017-01-16 6 views
0

私はC#で新しくなりましたが、配列についての基本的なことをまだ理解していません。私のプログラムを初期化するときには、ユーザーに整数型の入力を求めてから、それを使って配列のサイズを宣言します。 実装:私はプログラムをテストするとき配列のサイズを宣言するときにint変数を使用する

int sortSpaceSize = Console.Read(); 
bool[] sortSpace = new bool[sortSpaceSize]; 

はしかし、配列のサイズはちょうど...奇妙です。入力として45を入力すると52の配列サイズが出力されます。964684では57が出力されます。何が間違っているかはわかりません。配列を宣言するときに変数をサイズとして使用することが許されていない場合、これはなぜエラーを投げないのですか?代わりにリストを使うべきですか?前もって感謝します。

+0

「代わりにリストを使うべきですか?」これはあなたのエラーの原因ではありませんが、ほぼ確実にそうするべきです。 – Servy

+0

'Console.Read();'は1文字だけを読み込みます。 'Console.Read();'を 'Convert.ToInt32(Console.ReadLine();)に変更してください。 – Yousaf

答えて

1

これは、1つのチャーを読んでいるからです。あなたは、最初の数字のascii codeを変換して、配列のサイズとしてことを使用されている:クリスはそれを明確に、なぜあなたがそれらの奇妙な番号を取得作ったよう

string input = Console.ReadLine(); 
int sortSpaceSize; 
if (!Int32.TryParse(input, out sortSpaceSize)) 
{ 
    throw new Exception("not a number"); 
} 
bool[] sortSpace = new bool[sortSpaceSize]; 

:完全な番号を読んでみてください。

+2

である。そして45を入力として明示するために、配列の大きさは52で、これは '4 'のアスキーコードです。同様に、57は96468の最初の文字である '9 'のASCIIコードです。 – Chris

+0

コードにコメントとして、おそらく' TryParse'の戻り値をチェックすることができます。 'Int.Parse'を使うだけで失敗します。 'TryParse'を使って成功を捨てると、エラーを隠すことになります(例えば、人が数字の代わりに" blah "と入力すると、sortSpaceSizeはおそらく0になります)。 – Chris

関連する問題