2016-10-08 28 views
0

質問:配列入力が機能しない

入力データは、最初の行にテストケースの数を示します。 次に、テストケースそのものが1行に1つずつ続きます。 各テストケースには、ゼロマーキングの値が正の整数の配列が記述されています。 (このゼロを計算に含めないでください!!!)。 回答には、各配列の平均値が最も近い整数(四捨五入のタスクを参照)に丸められ、スペースで区切られている必要があります。

問題:

細かい動作しますが、第三indice和でarrayInputの値を割り当てられ、それがすべてを台無しにされて

。なぜこれが起こり、どのように修正できますか?

//araytest 
#include<cmath> 
#include<iostream> 

using namespace std; 

int main() 
{ 
    //var 
    int i = 0; 


    int array[13] = {}; 

    //take in # arrays 
    cin >> i; 
    for(int x = 0; x<i; x++) 
    { 
     //reset variables (for every array) 
     float arraySize = 0, 
     sum = 0, avg = 0; 
     int indice = 0, 
     arrayInput = 0; 

     while(cin >> arrayInput){ 
      if(arrayInput == 0) 
      { 
       if(indice == 0) 
       { 
        arraySize = 1; /*if only 0 put in first indice 
            to prevent divide by 0 */ 
        break; 
       } 

       else 
       { 
        arraySize = indice; // 0 doesn't count 
        break; 
       } 
      } 

      sum += arrayInput; 
      array[indice] = arrayInput; 
      arrayInput = 0; 
      indice++; 
     } 

     avg = round(sum/arraySize); 
     cout << avg << " "; 
    } 

    return 0; 
} 
+2

あなたは0サイズの配列を持っていますが、後でそれが存在しない要素に割り当てています。それはUBです。 – krzaq

+0

配列サイズはゼロです。サイズを指定してください。またはベクトルを使用する –

+0

さらに、上記のすべてに加えて、配列もベクトルも必要ありません。これは配列やベクトルを使わずに行うことができます。ベクターや配列の助けを借りて何かを手作りして渡すと、この割り当ては失敗します。 –

答えて

0

まず、このコードで使用した配列はまったく役に立たないと言っていました。それはarrayinputを保存する以外に何もしなかった。

次に、arrayize sum avgをfloat型にします。しかし、arrayinputは整数に割り当てられます!!つまり、この2.xxxのような結果は得られません。したがって、変数に対して宣言した型は無意味です。同じ型宣言を持つ必要があります。なぜコードがうまくいかないのか分かりません。なぜなら整数を入力すれば、間違ったことはないからです。しかし、2.xxxやx.xxxのような番号を指定するとクラッシュします。

関連する問題