нужна помощь в поиске среднего количества коробок печенья, проданных детьми с помощью счетчика, аккумулятора и конечного стража (базовое программирование, hwk, yay!). У меня проблема с выяснением того, почему AverageBoxes печатает неправильный номер.
Например:
Результат программы выводит -5 средних ящиков, когда это явно не так …
{
int numBoxes,
// Number of boxes of cookies sold by one child
totalBoxes = 0, // Accumulates total boxes sold by the entire troop
numSeller = 1; // Counts the number of children selling cookies
double averageBoxes; // Average number of boxes sold per child
// Write code to initialize the totalBoxes accumulator to O and
// The numSeller counter to 1.
cout << "**** Cookie Sales Information ****\n";
// Get the first input
cout << "Enter number of boxes of cookies sold by seller " << numSeller
<< " (or -1 to quit): ";
cin >> numBoxes;
// Write code to start a while loop that loops while numBoxes
// is not equal to -1, the sentinel value.
while(numBoxes != -1)
{
// Write code to add numBoxes to the totalBoxes accumlator.
// Write code to add 1 to the numSeller counter.
totalBoxes += numBoxes;
numSeller++;
// Write code to prompt for and input the number of boxes
// sold by the next seller.
cout << "Enter the number of boxes sold by girl scout # " << numSeller << ": ";
cin >> numBoxes;
}
// When the loop is exited, the value stored in the numSeller counter
// will be one more than the actual number of sellers. So write code
// to adjust it to the actual number of sellers.
numSeller = numSeller - 1;
if(numSeller == 0) // If true, -1 was the very first entry
cout << "\nNo boxes were sold.\n";
else
{ // Write code to assign averageBoxes the computed average number
// of boxes sold per seller.
// Write code to print out the number of sellers and average number
// of boxes sold per seller.
averageBoxes += numSeller / numBoxes;
cout << "The average number of boxes sold by the " << numSeller << " sellers was " << averageBoxes << endl;
}
return 0;
}
Это, вероятно, легко исправить, но любая помощь будет оценена, спасибо!
Вы оставили double averageBoxes;
неинициализированный (имеет неопределенное значение и делает +=
это не даст ничего, кроме другой неопределенной ценности).
Вы должны привести любой из операндов (или оба) к типу с плавающей точкой, так что результат numSeller / numBoxes
тип с плавающей точкой:
averageBoxes += numSeller / static_cast<double>(numBoxes);
Редактировать:
Хорошо, вы использовали неправильные переменные для выражения выше (это легко сделать благодаря их именам). Так должно быть:
averageBoxes += totalBoxes / static_cast<double>(numSeller);
И, возможно, просто не объявляйте свои переменные в верхней части вашей программы (не давая им значения). Объявите их там, где вы впервые их используете:
// += wasn't needed in any case
double averageBoxes = totalBoxes / static_cast<double>(numSeller);
Других решений пока нет …