2017-08-15 57 views
-1

我試圖創建一個程序來接收和存儲有關動態數組結構的信息。該計劃應該排列並顯示高於平均值,平均值和低於avaerage的團隊。這是我的代碼到目前爲止。 。所以我在做什麼是我收到用戶輸入之前檢查輸入,然後將其存儲在動態結構數組中。最後,我顯示存儲在結構中的所有信息。這是我目前得到的輸出,我不知道爲什麼我會得到這個負數。爲什麼? 謝謝從動態結構數組中獲取值

How many teams do you want to store? 2 
Enter the name of the team 1:Vikings 
Enter the team 1 percentage: 90 
Enter the name of the team 2:PackersGreen Bay Packers 
Enter the team 2 percentage: 80 
Above Average : 
Vikings 90% 
PackersGreen Bay Packers 80% 
Average : 
5.00136e-317% 
None 
Below Average : 
None 
9.25737e-306% 

這是我的代碼。

#include <iostream> 
#include <string> 
#include <cstring> 

using namespace std; 


int main() 
{ 

    struct aboveAverage 
    { 
     string name9; 
     double percentage1; 
    }; 

    struct average 
    { 
     string name10; 
     double percentage2; 
    }; 

    struct belowAverage 
    { 
     string name11; 
     double percentage3; 
    }; 

    int numOfteams; 
    double userInput; 

    cout << "How many teams do you want to store? "; 
    cin >> numOfteams; 
    cin.get(); 

    aboveAverage * arrayOfAboveAverage = new aboveAverage[numOfteams]; 
    average * arrayOfAverage = new average[numOfteams]; 
    belowAverage * arrayOfbelowAverage = new belowAverage[numOfteams]; 

    for (int i = 0; i < numOfteams; i++) 
    { 
    start: 
     int x = i + 1; 
     string name5; 
     cout << "Enter the name of the team " << x << ":"; 
     getline(cin, name5); 

     cout << "Enter the team " << x << " percentage: "; 
     cin >> userInput; 
     cin.get(); 



     if (userInput >= 66 && userInput <= 100) 
     { 
      arrayOfAboveAverage[i].percentage1 = userInput; 
      arrayOfAboveAverage[i].name9 = name5; 
     } 

     else if (userInput <= 66 && userInput >= 33) 
     { 
      arrayOfAverage[i].name10 = name5; 
      arrayOfAverage[i].percentage2 = userInput; 
     } 
     else if (userInput <= 33 && userInput >= 0) 
     { 
      arrayOfbelowAverage[i].name11 = name5; 
      arrayOfbelowAverage[i].percentage3 = userInput; 
     } 
     else 
     { 
      cout << "Percent cannot be greater than 100" << endl; 
      goto start; 
     } 


    } 

     cout << "Above Average :" << endl; 
     for (int j = 0; j < numOfteams; j++) 
     { 
      if (arrayOfAboveAverage[j].percentage1 != NULL || 
       arrayOfAboveAverage[j].name9 != "") 
      { 
       cout << arrayOfAboveAverage[j].name9 <<" "; 
       cout << arrayOfAboveAverage[j].percentage1 <<"%"<< endl; 
      } 
      else 
      { 
       cout << "None" << endl; 
      } 

     } 

     cout << "Average :" << endl; 
     for (int j = 0; j < numOfteams; j++) 
     { 
      if (arrayOfAverage[j].percentage2 > 0 || 
       arrayOfAverage[j].name10 != "") 
      { 
       cout << arrayOfAverage[j].name10 <<" "; 
       cout << arrayOfAverage[j].percentage2 <<"%"<<endl; 
      } 
      else 
      { 
       cout << "None" << endl; 
      } 
     } 

     cout << "Below Average : "<< endl; 
     for (int k = 0; k < numOfteams; k++) 
     { 
      if (arrayOfbelowAverage[k].percentage3 > 0 || 
       arrayOfbelowAverage[k].name11 != "") 
      { 
       cout << arrayOfbelowAverage[k].name11 << " "; 
       cout << arrayOfbelowAverage[k].percentage3 <<"%"<< endl; 
      } 
      else 
      { 

       cout << "None" << endl; 
      } 
     } 

    delete[] arrayOfAboveAverage; 
    delete[] arrayOfAverage; 
    delete[] arrayOfbelowAverage; 

    return 0; 

} 
+4

你真的不需要3個不同的數組和3種不同的類型。你只需要一個團隊類型,然後你可以通過這個單一的數組來查找上面的,下面的和普通的團隊。 – NathanOliver

+0

雖然有效,但問題是我們需要創建3種不同的結構。 – Becca

+1

'5.00136e-317'不是負數,它是正數,但非常小。您需要正確初始化陣列或跟蹤每個包含的有效元素的數量。 – molbdnilo

回答

0

問題出在下面的測試

 if (arrayOfAverage[j].percentage2 > 0 || 
      arrayOfAverage[j].name10 != "") 

arrayOfAverage未初始化(如你的情況)name10與用於std::string(空字符串)的默認值初始化,但是對於價值percentage2(a double)未定義。您在true情況下輸入:

你用「或」不是「和」,因此,如果percentage2與正值初始化(5.00136e-317舉例)測試這兩個值。

建議:當有一個有用的值,則name10值不爲空,所以忽略percentage2和修改測試如下

if (! arrayOfAverage[j].name10.empty()) 

前述

 if (arrayOfAboveAverage[j].percentage1 != NULL || 
      arrayOfAboveAverage[j].name9 != "") 

同樣的問題和下面的測試

 if (arrayOfbelowAverage[k].percentage3 > 0 || 
      arrayOfbelowAverage[k].name11 != "") 

我suggestio n是修改它們如下

if (! arrayOfAboveAverage[j].name9.empty()) 

// ... 

if (! arrayOfBelowAverage[j].name11.empty()) 
+0

由於某種原因,我的編譯器不接受空函數。它錯誤了。@ max66 – Becca

+0

@Becca - 很奇怪;你能轉錄錯誤嗎?無論如何,你可以使用'size()';就像'if(arrayOfAverage [i] .name10.size())'(但是如果你可以使用'empty()'是(我想)更好) – max66