使用数组时出现问题

Issues with using arrays

本文关键字:问题 数组      更新时间:2023-10-16

我正在学习如何做数组,目前一直停留在这个项目上。我已经附加了我所拥有的,但无法弄清楚我哪里出了问题,因为程序只是继续重复而没有结束我需要的答案。

它应该允许用户输入 20 个数字,然后显示每个数字及其与输入数字的数字平均值的差异。分配的第 2 部分是修改它,以便用户可以输入最多 20 个数字,直到输入哨兵值。

#include <iostream>
#include <string>
using namespace std;
int main()
{
const int SIZE = 12;
int numbers[12] = { 0 };
int value = 0;
int counter = 0;
int total = 0;
int average = 0;
int diffFromAvg = 0;
int SENTINEL = -1;
cout << "Please enter a positive number: " << endl;
cin >> value;
while ((counter < SIZE) && (value != SENTINEL))
{
total = total + value;
numbers[counter] = value;
counter = counter + 1;
if (counter != SIZE) {
cout << "Please enter a positive number: " << endl;
cin >> value;
}
if (counter > 0) {
average = total / counter;
for (int i = 0; i <= SIZE; i--)
{
diffFromAvg = numbers[i] - average;
cout << "Number[i]: " << numbers[i] << " Difference from Average is " <<
diffFromAvg << endl;
}
}
else {
cout << "Processing incomplete. No values in the array." << endl;
}
}
system("Pause");
return 0;
}

另一个答案同样好。 我保留了你的while((循环,但做了一些更改。明智的做法是将您的处理分开一点。 这可以分解为更小的功能

#include <iostream>
#include <string>
using namespace std;
int main() {
const int SIZE = 12;
int numbers[12];
int value = 0;
int index;
int SENTINEL = -1;
index = 0;  // initialize here so you keep track of it
while ((index < SIZE) && (value != SENTINEL)) {
cout << "Please enter a positive number: " << endl;
cin >> value;
numbers[index] = value;
index++; // increment index after assigning the array value
}
// Calculate the average
int total = 0;
for (int i = 0; i < SIZE; i++) {
total += numbers[i];
};
int average = total / SIZE;
cout << "Average is: " << average << endl;
for (int i = 0; i < SIZE; i++) {
int diffFromAvg = numbers[i] - average;
cout << "Number[i]: " << numbers[i]
<< " Difference from Average is "
<< diffFromAvg << endl;
}
system("Pause");
return 0;
}

我建议你遵循IPO模式:

#include <cstdlib>
#include <iostream>
#include <iomanip>
int main()
{
constexpr std::size_t max_numbers{ 20 };
constexpr int sentinel{ -1 };
int numbers[max_numbers];
std::size_t num_count{};
int sum{};
// input:
for (int current_value;
num_count < max_numbers && std::cout << "Please enter a positive number: " &&
(std::cin >> current_value) && current_value != sentinel;
++num_count)
{
numbers[num_count] = current_value;
sum += current_value;
}
// proccess:
if (!num_count) {
std::cerr << "No input.nn";
return EXIT_FAILURE;
}
auto mean{ sum / static_cast<double>(num_count) };
// output:
std::cout.put('n');
for (std::size_t i{}; i < num_count; ++i)
{
auto distance_to_mean{ numbers[i] - mean };
std::cout << "Number " << std::setw(2) << i + 1 << ": " << std::setw(5) << numbers[i]
<< 't' << std::setw(5) << std::fixed << distance_to_mean << 'n';
}
std::cout.put('n');
}