计算本地数组中的元素

Counting the elements in a local array

我有一个 double x[12] 其中没有任何元素。当提示用户时,he/she 输入一个数字,该数字存储在 x 中。

我希望程序首先检查x是否为空,如果是,则将用户输入放入x[0],否则,将用户输入放入下一个空闲指数.

我这样做了:

...

double x[12];

void AddPayment(double Amount)
{
    int i = sizeof(x);

    x[i] = Amount;
}

是否 sizeof() 不适用于数组,是否有更好的方法?

sizeof应用于一个数组时,它不会告诉你这个数组有多少数据;它告诉您数组 可以 保存多少数据。您没有指定要放入 double x[12] 的任何数据这一事实对数组的大小没有影响。因此,sizeof 将 return 您的系统需要的字节数来容纳十二 double 个数组。

如果您想统计 12 项中有多少项已分配,请为其添加一个单独的变量。将其初始化为零,并使用它来跟踪已插入的项目数:

size_t x_count = 0;
double x[12];
void AddPayment(double Amount) {
    if (x_count == 12) {
        // Error; we cannot add more than 12 items.
        // Tell the user what's going on and quit,
        // or handle the error in some other way.
        cerr << "Cannot add more than 12 elements to x[]" << endl;
        return;
    }
    x[x_count++] = Amount;
}

无论 x[12] 是否有值,它的大小始终为 12 * sizeof(double)。

因此使用 sizeof() 运算符并不是实现您的目标的好方法。

最好的做法是用用户无法输入的值(比如 0)初始化 x[12],然后测试数组中第一个可用位置输入该值的零。

double x[12] = { 0 };

void AddPayment(double Amount)
{
    for (int i = 0; i < 12; i++) {
        if (x[i] == 0) {
            x[i] = Amount;
            break;
        }       
    }
}

I have a double x[12] which has no elements in it.

这是一种误解。 double x[12]; 创建 12 个 double 元素,使它们的值处于未定义状态。所以你有 12 个未初始化的元素。这与 没有 元素完全不同。

(如果你有一个 std::string 类型的数组,这个误解会变得更加清晰。与 double 不同,std::string 总是初始化为一个定义的值,一个空字符串。所以 std::string x[12] 肯定是 12 个字符串,而不是一个空数组。)

When the user is prompted, he/she enters a number, which is stored in x.

I want the program to first check if x is empty and if it is, put the user's input in x[0] or if it isn't, put the user's input in the next free index.

我真的很惊讶没有人提出这个建议,但是数组对于你想要完成的事情来说是错误的工具。您需要一个可以 增长 的容器。你需要 std::vector:

std::vector<double> x; // starts off empty

void AddPayment(double Amount)
{
    x.push_back(Amount); // grows by 1 element
}

std::vector还有一个size()成员函数,告诉你当前的元素个数。不再需要 sizeof