尽管输入正确,浮点数组仍存储垃圾值

Floating point arrays storing garbage value despite input correctly given

我正在尝试解决一个问题,为此我必须将浮点数存储在 3 个不同的数组中,令人惊讶的是存储的值全为零,你能指出这里出了什么问题吗。

#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;



int main(){
 
   int n,m;
  cin>>n>>m;
 vector<float>prb(n+1,0),prft(n+1,0),loss(n+1,0);
  for(int i=1;i<=n;i++){
    float x;
    cin>>x;
    prb.push_back(x);
  }
  for(int i=1;i<=n;i++){
    float x;
    cin>>x;
    prft.push_back(x);
  }
    for(int i=1;i<=n;i++){
    float x;
    cin>>x;
    loss.push_back(x);
  }
  
  cout<<endl;
  
   for(ll i=1;i<=n;i++){
    cout<<prb[i]<<' ';
  }
  cout<<endl;
   for(ll i=1;i<=n;i++){
    cout<<prft[i]<<' ';
  }
  cout<<endl;
   for(ll i=1;i<=n;i++){
    cout<<loss[i]<<' ';
  }
 
 
 
 
  
return 0;
}

输入:

4 2  
0.50 0.50 0.50 0.50  
4.00 1.00 2.00 3.00  
4.00 0.50 1.00 1.00

输出:

0 0 0 0 
0 0 0 0
0 0 0 0

编辑:数组更改为浮点向量。仍然没有得到期望的值。伙计们,你认为问题出在编译器上,还是我在用 C++ 做一些愚蠢的事情。

存储的值不是零,只是用给定的大小初始化向量,并将这些值设置为零。

push_back 将新元素附加到向量的末尾。

使用 at 而不是 push_back 是解决方法。

它正在工作,只需检查此示例代码,并输入浮点数

#include <iostream>
#include <vector> 
using namespace std;

int main()
{
    vector<float> v1;
    float x;
    for(int i=0;i<5;i++){
      cin>>x;
      v1.push_back(x);
    }
    for (int i = 0; i < v1.size(); ++i) {
        cout << v1[i] << ' ';
    }
    return 0;
}

给你,

vector<float>prb(n+1,0),prft(n+1,0),loss(n+1,0);

可以替换为,

vector<float>prb(n),prft(n),loss(n);

在你原来的程序中修复它:)

此外,在访问值(准确地说是 cout)时,访问第 i-1 个元素而不是第 i 个。因为,完成的默认索引是从 0 开始的,而您正在从索引 1 访问。

像 prb[i-1]、prft[i-1] 和 loss[i-1]。