我想提取每个节点的最大值,但我的程序只打印了节点号1的最大值八次:
223 223 223 223 223 223 223 223
根据我希望看到的输入数据:
223 736 898 543 367 726 568 563
任何帮助 提前致谢
这是我的代码:
#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;
}
答案 0 :(得分:0)
您的问题未格式化,我认为您应该删除此行
maxTxEnergy = TxEnergy;
由于此行将maxTxEnergy
设为您阅读的最后一个TxEnergy
。
答案 1 :(得分:0)
您的代码格式非常糟糕,命名惯例非常糟糕,并且您以非常糟糕的方式使用标准库,但这不是您的问题。你的程序真正做的是它读取文件中的每一行,并在该行中搜索&#34;节点的传输号码&#34; + s +&#34;是:&#34;但问题是s
等于j
而j
是序号,其值为0,1,2,3,4,5,6,7,8
,但文件中的节点编号只是1,4,7,5,6,..
所以值每个搜索操作中a
的{{1}}除了第一个数字,其中s等于节点数,并且如果您尝试将文件第一行中的第一个节点数更改为{{-1
1}}您将看到32
中返回的输出为0。
编辑:我写过这个内循环代替你的内循环,我认为它会给你想要的结果。每个循环都会读取整个文件,搜索所需的节点号,等于TxE
:
j