-2
int main()
{
    int n, inInt;
    vector <int> list;
    ifstream ifs("1.txt");
    float a;
    ifs >> a;
    std::vector<int> result;
    int temp;

    while(! ifs.eof())
    {
        ifs >> temp;
        result.push_back(temp);
    }

    int b;
    b = result.size();
    float array[b+1];
    int i;
    array[0] = a;

    for(i = 1;i < b+1;i++) {
        array[i] = (array[i-1] + result[i]-2*array[i-1] * result[i]/a); 
    }
    cout << array[b];

    system("pause");
    return 0;}

基本上在我的代码中,我构建了一个向量并构建了一个数组,并尝试使用数组中向量中的数据。但是,当我给代码发短信时,它给了我一个巨大的错误数字。

4

2 回答 2

2

temp不是数组,temp是整数。你试图operator[]在一个 int 上使用你不能这样做。此外,VLA(可变长度数组)是 GCC 扩展,因此不是标准的。我建议你替换这一行:

float array[b+1];

和:

std::vector<float> array(b+1);
于 2013-07-21T13:49:27.680 回答
0

我看到至少两个问题。首先,您的输入循环不正确,并在result. 您可以使用以下输入循环来解决此问题:

while (ifs >> temp)
{
    result.push_back(temp);
}

其次,向量result包含b元素,因此有效索引为[0..b-1]。您的循环结束条件i < b+1将读取结束后的一个元素result。我认为您可以通过这样做来解决此问题:

for(i = 0; i < b; i++)
{
    array[i+1] = (array[i] + result[i]-2*array[i] * result[i]/a);
}

当我进行这些更改并用于3 2 2输入时,输出是1.66667

于 2013-07-21T14:21:44.400 回答