尽管输入正确,浮点数组仍存储垃圾值
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]。
我正在尝试解决一个问题,为此我必须将浮点数存储在 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]。