所以我有这段代码..它似乎没有押韵或理由而出现分段错误 . 我正在为HackerRank练习问题,当我离开所有的couts,它工作正常,但我失败,因为所有额外的输出 .
当我注释掉/彻底删除cout行时,我会得到分段错误 .
香港专业教育学院以脚本形式编写代码,主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;
}
*********那是主要的()调用结果(),这是脚本格式
#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;
}
1 回答
在这两个代码中,您正在初始化
a1
和a2
,大小为n
,在第一个代码示例中为零点,在第二个示例中为不确定(因为未初始化) . 你永远不会调整这些向量的大小,但是在n
从cin
读取之后,尝试将它们编入索引,好像它们的大小更大 .这是未定义的行为,它是否“有效”是纯粹的运气 . 在第二个示例中,具有不确定大小的初始化也是未定义的行为 .
还要注意全局变量的初始化顺序很棘手,它只能在这种情况下正常工作,因为向量在动态初始化阶段初始化,而
n
在静态初始化阶段初始化,静态初始化阶段始终在动态初始化阶段之前排序 . 通常,通常无法保证全局初始化将按预期顺序发生 .如果您启用了额外的警告和可能的优化,某些编译器会警告您在第二个代码中使用uninitiliazed变量 . (例如对于clang
-Wall -Wextra
,对于gcc-Wall -Wextra -O2
)此外
using namespace std;
是不好的做法,见this question .