所以我有这段代码..它似乎没有韵律或原因就发出了分段错误。我这样做是为了解决HackerRank的练习问题,当我离开所有的球杆时,它可以正常工作,但是我失败了,因为所有额外的输出。
当我注释掉/直接删除提示行时,我会遇到细分错误。
ive以脚本形式编写了代码,并且主fxn调用了单独的fxn以输出正确的数字,并且仍然相同。但是我知道逻辑是合理的,因为它在底部输出正确的答案。
测试的结果是,它输入3行:第一行为5,第二行为10 40 30 50 20,第三行为1 2 3 4 5。第一行指定接下来的2个数组的长度,并用第二和第三行的值填充。输出应该是只有一行包含32.0的值,但我似乎只能使它与注释一起使用,从而将输出至少更改为21行
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
double wm=0;
vector<double>a1(n);
vector<double>a2(n);
double result(vector<double> arr1, vector<double> arr2){
double wv=0.0;
double wv2=0.0;
for(int i=0; i<n; i++){
wv+=(arr1[i] * arr2[i]);
cout<<wv<<"\n";
}
for(int i=0; i<n; i++){
wv2+=arr2[i];
cout<<wv2<<"\n";
}
return wv/wv2;
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
cin>>n;
for(int i=0; i<n; i++){
cin>>a1[i];
cout<<a1[i]<<"\n";
}
for(int ii=0; ii<n; ii++){
cin>>a2[ii];
cout<<a1[i]<<"\n";
}
wm=result(a1,a2);
cout.precision(1);
cout<<fixed<<wm;
return 0;
}
**********************这是Main()调用Result(),这是脚本格式**********
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int n;
vector<double>a1(n);
vector<double>a2(n);
double wv=0.0;
double wv2=0.0;
double wm=0;
cin>>n;
for(int i=0; i<n; i++){
cin>>a1[i];
cout<<a1[i]<<"\n";
}
for(int ii=0; ii<n; ii++){
cin>>a2[ii];
cout<<a2[ii]<<"\n";
}
for(int i=0; i<n; i++){
wv+=a1[i] * a2[i];
cout<<wv<<"\n";
}
for(int i=0; i<n; i++){
wv2+=a2[i];
cout<<wv2<<"\n";
}
wm=wv/wv2;
cout.precision(1);
cout<<fixed<<wm;
return 0;
}
答案 0 :(得分:1)
在这两个代码中,您都将a1
和a2
初始化为大小n
,在第一个代码示例中该点为零,在第二个示例中不确定(因为未初始化)。您永远不会调整这些向量的大小,而是稍后再尝试对它们进行索引,就好像从n
读取cin
之后它们的大小一样。
这是未定义的行为,它是否会“起作用”纯粹是运气。在第二个示例中,具有不确定大小的初始化也是未定义的行为。
还请注意,全局变量的初始化顺序比较棘手,并且只能在这种情况下正常工作,因为矢量是在动态初始化阶段初始化的,而n
是在静态初始化阶段,该阶段总是在动态阶段之前进行排序。通常,通常无法保证全局初始化将按预期顺序进行。
如果启用了额外的警告和可能的优化,则某些编译器会警告您有关第二个代码中未初始化变量的使用。 (例如,对于clang -Wall -Wextra
,对于gcc -Wall -Wextra -O2
)
此外,using namespace std;
是一种不好的做法,请参见this question。