C ++,无法获取逻辑

时间:2018-06-24 07:20:02

标签: c++

实际上我没有得到应该得到自己想要的东西的逻辑。我实际上想将第三栏减半,并在第二行中找到班级间隔的中间部分,然后打印。但是我没有得到想要的结果,或者我没有得到获得结果的适当逻辑。我的程序按

#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

1 个答案:

答案 0 :(得分:1)

如果您真的只想获得两行具有相同的计算值并且仅在第1列中的能量不同,则只需插入另一行

std::cout << Energy1 << "\t" << mu/2 << "\n";

输出之前。