2016-12-22 5 views
3

ユーザから5つの正の数値を取得するためのコードを書く必要があります。ユーザからの負の入力を確認して、配列を操作する

cout << "Write 5 positive numbers:" << endl; 
int input; 
int num[5]; 

for(int i = 0; i <= 4; ++i){ 
    cin >> input; 
    if(input < 0){ 
     cout << "Error" << endl; 
    }else{ 
     num[i] = input; 
    } 
} 
for(int i = 0; i <= 4; ++i){ 
    cout << "Number " << i << " = " << num[i] << endl; 
} 

問題が正の数を格納する必要があり、その配列である: はここに私のコードです。否定numと入力すると、それも保存され、ガベージ値が出力されます。例えば、入力がある:3 -2 1 6 8 出力は次のとおり

Number 0 = 3 
Number 1 = -1608404014 
Number 2 = 1 
Number 3 = 6 
Number 4 = 8 

アレイ内のすべての5つのバケットが正数

+1

あなたのコードは、あなたが言ったことを正確に行っています。負の数を入力すると、配列のインデックスはスキップされます。 – John3136

+2

あなたは 'while loop'を使う必要があります – Yousaf

答えて

4

のみ充填されるまで、入力を入力したユーザに尋ねるべきコード負の数を入力すると、コード内の配列のインデックスがスキップされるため、ガーベッジの値が出力されます。

ユーザが正の値を入力するまでユーザに入力を求め続けるには、if blockの中にwhile loopが必要です。負の値を入力すると、Errorというメッセージが表示されます。

else blockまた、コードからfor loopを削除する必要があります。これがガベージ値の原因となるためです。

てみてください、次のコード

int main() 
    { 
     cout << "Write 5 positive numbers:" << endl; 
     int input; 
     int num[5]; 

     for(int i = 0; i <= 4; i++) 
     { 
      cin >> input; 
      if(input < 0) 
      { 
       cout << "Error" << endl; 
       while(input < 0) 
       { 
        cin>>input; 
       } 

      } 

      num[i] = input; 
     } 

     for(int i = 0; i <= 4; i++){ 
     cout << "Number " << i << " = " << num[i] << endl; 
     } 

     return 0; 
    } 
1

入力値が負であるので、あなたは、要素iにそれを保存するだけで、あなたが入力することなく、この要素を残し、メッセージをポップアップし、ループカウンタをインクリメントしてなどいませんあなたは初期化されていない変数は、ガベージ値を持っていると思います:

ソリューションが有効な値が入力されるまで、たとえば埋め込ま誘い込むループを使用して負の値にブロックすることです:

int input; 
int num[5]; 

for(int i = 0; i <= 4; ++i) 
{ 
    cin >> input; 
    while(input < 0) 
    { 
     cout << "Error" << endl; 
     cout << "num[ " << i << "]: "; 
     cin >> input; 
    } 
     num[i] = input; 
} 

for(i = 0; i <= 4; ++i){ 
cout << "Number " << i << " = " << num[i] << endl; 
} 
関連する問題