实际上我没有得到应该得到自己想要的东西的逻辑。我实际上想将第三栏减半,并在第二行中找到班级间隔的中间部分,然后打印。但是我没有得到想要的结果,或者我没有得到获得结果的适当逻辑。我的程序按
#include <iostream>
#include <cmath>
#include <fstream>
#include <sstream>
int main()
{
std::ifstream f("t2kflux.txt");
std::string line;
// Skip first three lines
std::getline(f, line);
std::getline(f, line);
std::getline(f, line);
while(std::getline(f, line))
{
float serial;
double Energy, Energy2,Energy1;
double mu;
double mubar;
double e;
double ebar;
char dash; // to absorb the '-' separator
std::istringstream ss(line);
ss >> serial >> Energy >> dash >> Energy2 >> mu >> mubar >> e >> ebar;
Energy1=(Energy+Energy2)/2;
std::cout << Energy1+0.025 << "\t" << mu/2 << "\n";
}
}
我的数据文件部分是
Flux (/cm^2/1E21p.o.t/50MeV)
Bin# Energy (GeV) numu anti-numu nue anti-nue
---------------------------------------------------------------------------------
1 0.00- 0.05 1.27e+04 1.64e+04 1.80e+02 2.97e+01
2 0.05- 0.10 5.40e+04 5.41e+04 1.02e+03 1.23e+02
3 0.10- 0.15 1.11e+05 3.98e+04 2.17e+03 2.12e+02
4 0.15- 0.20 1.75e+05 3.10e+04 3.23e+03 2.86e+02
5 0.20- 0.25 2.62e+05 2.78e+04 4.08e+03 3.56e+02
6 0.25- 0.30 3.68e+05 2.77e+04 4.73e+03 4.15e+02
7 0.30- 0.35 4.83e+05 2.83e+04 5.27e+03 4.61e+02
8 0.35- 0.40 5.97e+05 2.92e+04 5.58e+03 4.93e+02
9 0.40- 0.45 7.21e+05 2.97e+04 5.80e+03 5.18e+02
10 0.45- 0.50 8.89e+05 2.93e+04 5.77e+03 5.31e+02
11 0.50- 0.55 1.11e+06 2.93e+04 5.72e+03 5.35e+02
12 0.55- 0.60 1.24e+06 2.98e+04 5.53e+03 5.31e+02
13 0.60- 0.65 1.23e+06 2.92e+04 5.33e+03 5.26e+02
14 0.65- 0.70 1.14e+06 2.80e+04 5.03e+03 5.15e+02
15 0.70- 0.75 9.10e+05 2.59e+04 4.76e+03 5.05e+02
16 0.75- 0.80 6.31e+05 2.43e+04 4.43e+03 4.92e+02
17 0.80- 0.85 4.16e+05 2.07e+04 4.09e+03 4.81e+02
18 0.85- 0.90 2.70e+05 2.01e+04 3.78e+03 4.67e+02
19 0.90- 0.95 1.86e+05 1.89e+04 3.41e+03 4.55e+02
20 0.95- 1.00 1.39e+05 1.78e+04 3.13e+03 4.46e+02
我要得到的部分是
0.05 6350
0.1 27000
0.15 55500
0.2 87500
0.25 131000
0.3 184000
0.35 241500
0.4 298500
我想要的是:
0.025 6350
0.05 6350
0.075 27000
0.10 27000
0.125 55500
0.150 55500
答案 0 :(得分:1)
如果您真的只想获得两行具有相同的计算值并且仅在第1列中的能量不同,则只需插入另一行
std::cout << Energy1 << "\t" << mu/2 << "\n";
输出之前。