从文件C ++中读取数据

时间:2016-03-23 23:58:06

标签: c++

我想提取每个节点的最大值,但我的程序只打印了节点号1的最大值八次:

223 223 223 223 223 223 223 223

根据我希望看到的输入数据:

223 736 898 543 367 726 568 563

this is my textfile

任何帮助 提前致谢

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <string>
#include <numeric>
using namespace std;
   template <typename T>
   string IntToString(T Number)
    {   stringstream ss;
      ss <<Number;
     return ss.str();
     }
int main() {
                ifstream ifs;
        ofstream ofs;
                double maxTxEnergy = 0;
                vector<double> TxE;
                double maxRxEnergy = 0;
                double FullTxEnergy = 0;
                double FullRxEnergy = 0;
for (int i = 1; i <=1; i++){    
        stringstream ss;
        ss <<i<<"00";
        string filename = ss.str();
        filename.append(".txt");
        ifs.open(filename.c_str());
        cout << "Analyzing: " << filename << endl;
        string filename1 = "Result/";
        filename1.append(filename);
        ofs.open(filename1.c_str());
        string str;     
 for (int j=1; j<=8; j++)
{
   string s = IntToString(j);
        while (!ifs.eof()) {
            getline (ifs, str);
 int a = str.find("transmission number  for node "+s+" is :");
 if (a != -1) {
                double TxEnergy = 0;
                istringstream iss(str.substr(a+62));
                iss >> TxEnergy;
                maxTxEnergy = TxEnergy;
                                if(maxTxEnergy<TxEnergy)
                                maxTxEnergy = TxEnergy; 
        }

  }
   TxE.push_back(maxTxEnergy);            

}
for (std::vector<double>::iterator it = TxE.begin(); it != TxE.end (); it++)
   {
ofs << "Full transmission Energy: " << *it << endl; 
    }          
        ifs.close();
        ofs.close();
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您的问题未格式化,我认为您应该删除此行

maxTxEnergy = TxEnergy;

由于此行将maxTxEnergy设为您阅读的最后一个TxEnergy

答案 1 :(得分:0)

您的代码格式非常糟糕,命名惯例非常糟糕,并且您以非常糟糕的方式使用标准库,但这不是您的问题。你的程序真正做的是它读取文件中的每一行,并在该行中搜索&#34;节点的传输号码&#34; + s +&#34;是:&#34;但问题是s等于jj是序号,其值为0,1,2,3,4,5,6,7,8,但文件中的节点编号只是1,4,7,5,6,..所以值每个搜索操作中a的{​​{1}}除了第一个数字,其中s等于节点数,并且如果您尝试将文件第一行中的第一个节点数更改为{{-1 1}}您将看到32中返回的输出为0。

编辑:我写过这个内循环代替你的内循环,我认为它会给你想要的结果。每个循环都会读取整个文件,搜索所需的节点号,等于TxE

j