2016-04-06 9 views
0

私はコミュニティとコーディングに新しいです。今私は自分のCCでイントロをコンピューターサイエンスに取り入れており、私たちはC++を学んでいます。とにかく、私はユーザに配列new_arrayのサイズインジケータになる数字を尋ねるプログラムを作成しなければなりません。その後、プログラムは、ユーザに数字を1つずつ入力するように要求し、後でそれを逆に出力する。 #include namespace stdを使用しています。C++:forループを使用して配列に数値を入力できるようにする

int main() 
{ 
cout << "How many numbers?\n"; 
int numbers; // holds amount of numbers to be entered into array 
cin >> numbers; 
int new_array[numbers]; 
for(int counter = 0; counter < numbers; counter++) 
{ 
    cout << "Enter number " << counter << endl; 
    cin >> new_array[counter]; 
} 

cout << "You entered: " << endl; 

for(int i = numbers; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 

} 

return 0; 
} 

私はこれを行う方法を理解しており、ほとんどの場合、プログラムは機能しました。それは逆に入力した数字を出力しますが、そうする前に大きくて奇妙な数字を出力します。たとえば、ユーザが入力する数字の数として5を入力し、5の数字としてそれぞれ1, 2, 3, 46と入力した場合、最初に番号4669476が出力され、その数字が逆に出力されます。私が間違っていたことや、これをどうやって解決できるか誰にでも教えてくれますか?先進的でありがとう! PSは優しいです!私はこれで初心者です

答えて

1

このループは、範囲外の読み込み:あなたはあなたの頭の中でを通じてiに従っている場合、あなたがそのあなたの出力エントリnumbers0に表示されます

for(int i = numbers; i >= 0 ; i--) 
{ 

、時に実際に使用するべき出力エントリnumbers-10に至ります。

for(int i = numbers; i--;) 

それとも、伝説的な--> operatorを使用することができます。

代替のパターンがあります。

numbers - 1から「簡単に」開始することはできますが、使用したループパターンは符号なしカウンタでは機能しません(常に>= 0なので)。 IMHOすべてのタイプで機能するパターンを使用することをお勧めします。あなたは将来間違いを起こす可能性は低いです。

0

for loopのディスプレイでは、i = numbersから始まり、配列の範囲外です。配列は0 till size - 1から始まりますから、i = numbers - 1から始まり、>=0に始まる必要があります。

0

array[numbers]から始まるので、定義されていません。

array[0], array[1], ... array[numbers-1]が定義されている。 Cアレイでは

0

は、あなたがそれを書いているときに、あなただけではなくnumbersnumbers - 1開始する必要があります0の代わりに、だから、最後の番号がarray[4]

に格納された1から保存されます。

0

範囲外からインデックスを開始しているため、ガベージ値が得られます。

は、あなたのコードは、この

for(int i = numbers-1; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 
    } 
のようないくつかのことになります
関連する問題