2016-08-05 8 views
0

Я имитирую беспроводную сенсорную сеть в omnet ++ (mixim), я хочу проанализировать результат в конкретном раунде, например, 500,1000,1500,2000,2500,3000,3500 и 4000. Я пишу код, как следует, но его дозу не работают и показывают результат в некоторых раундах, таких как 496 492 и 502. Как я могу изменить код, чтобы показать, что конкретный 7 раунд, который я упомянул? код:как показать результат в omnet ++ в конкретном раунде?

int rr; 
    rr=static_cast<SensorNode *>(this->getParentModule()->getParentModule()->getSubmodule("node",1)->getSubmodule("netwl"))->GetRound(); 

    if(abs(rr-500)<5 || abs(rr-1000)<5 || abs(rr-1500)<5 || abs(rr-2000)<5 || abs(rr-2500)<5 || abs(rr-3000)<5 || abs(rr-35000)<5 || abs(rr-4000)<5) 
    { 
      char ss1[30]; 
      sprintf(ss1,"Dead_CHs_Round_%d",rr); 
      recordScalar(ss1,nDeadCH); 

ответ

0

Вашего код проверяет, есть ли разница между rr и вашими ожидаемыми раундами меньше 5. Например

rr = 496 
if (abs(rr-500) < 5 || .....) { 
    // your code 
} 
//--> abs(496 - 500) < 5 
//--> abs(-4) < 5 
//--> 4 < 5 --> true 

Так что вашим, если условие становится истинным для rr = 496. Чтобы избежать этого, удалите abs() и <5 и изменить его, как следующее:

if(rr == 500 || rr == 1000 || .....) { 
    // your code 
} 
+0

спасибо за ответ на мой вопрос, я изменил код, но в итоге dosen't показать все раунды, что я хочу , он показывает только результат раунда 1000,2500 и 4000, что я написал, чтобы показать другой раунд? –

+0

Я слегка отредактировал свой ответ. Можете ли вы опубликовать свое заявление if? Поэтому я могу взглянуть на него. – Ventu

+0

int rr; rr = static_cast (this-> getParentModule() -> getParentModule() -> getSubmodule ("node", 1) -> getSubmodule ("netwl")) -> GetRound(); if (rr == 500 || rr == 1000 || rr == 1500 || rr == 2000 || rr == 2500 || rr == 3000 || rr == 3500 || rr == 4000) –