2016-10-08 2 views
0

Вопрос:Вход массива не работает

Ввод данных даст количество тестовых примеров в первой строке. После этого будут выполняться сами тесты, по одному случаю в строке. В каждом тестовом случае описывается массив положительных целых чисел со значением конца маркировки 0. (этот нуль не должен включаться в вычисления !!!). Ответ должен содержать средние значения для каждого массива, округленные до ближайшего целого числа (см. Задачу округления), разделенные пробелами.

Проблема:

работает отлично, но в третьей сумме 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

Во-первых, как и другие люди, массив, который вы использовали в этом коде, абсолютно бесполезен. Он ничего не делал, кроме сохранения массива.

Во-вторых, вы можете массировать сумму avg для типа float. Однако arrayinput присваивается как целое! Это означает, что вы никогда не получите результат, подобный этому 2.xxx. Таким образом, тип, который вы объявляете для переменных, не имеет смысла. Они должны иметь однотипную декларацию. Я не понимаю, почему код плохо работает. Потому что, если вы введете целое число, вы не получите ничего плохого. Но он сработает, если вы укажете номер, например 2.xxx или x.xxx.

Смежные вопросы