2013-05-03 61 views
0

我一直在做這個程序一段時間,但它拒絕合作這最後一點點。程序的重點在於將數據文件篩選到三個數組中,對數組進行排序,然後將其打印到表中。我遇到的問題似乎與表格一致。該程序分爲四個函數,當我嘗試調試時,它不會在函數中顯示productName數組。程序不會打印字符串數組C++

代碼的故障段看起來是這樣的:

void printReport (string productName[], int numberinStock[], float price[], int number_of_products) 
{ 
    float totalPrice; 

    cout << setw(18) << " " << "Friendly Grocer Store Inventory" << setw(17) << " " << endl; 
    cout << setw(18) << "Inventory Item" << setw(16) << "Number in Stock" << setw(16) << "Unit Price" << setw(16) << "Total Sales" << endl; 
    for (int count=0; count <number_of_products-1; count++) 
    { 
     cout << setw(18) << productName[count] << setw(16) << numberinStock[count] << setw(16) << std::setprecision(2) << price[count] << setw(16) << std::fixed << std::setprecision(2) << price[count]*numberinStock[count] << endl; 
    } 
    cout << "Total Price: " << totalPrice; 
} 

它將打印一切,但不是productName。 for循環之外的某些調試語句(如cout << productName[1])將打印出適當的productName,但它在實際報告中完全空白。 經過一些調試後,似乎在for循環中輸出productName後,每個項目都會覆蓋產品名稱。

例如剛剛離開cout << setw(18) << productName[count] << setw(16) << numberinStock[count] << endl;

會產生

「3S」
「10H」
「2A」

的產品名稱有芒果,三明治,和比薩。

我不知所措。我在哪裏搞砸了?

+0

瘋狂的猜測:所有'productName's以''\ r''結尾? – 2013-05-03 02:18:22

+0

沒有。它們都存儲在一個.dat文件中,就像常用的家用名稱一樣。 (就像現在的芒果,三明治和披薩一樣)。另外,我發現把一個endl;在productName之後,然後讓第二行的其餘信息對主要有幫助。我介紹setw的那一刻,它有點覆蓋了productName。 – user2345261 2013-05-03 02:24:50

+1

「endl」有助於暗示你確實在你的字符串中有「\ r''s。什麼平臺a)你在運行,和b)是創建的文件? [如果該文件是在Windows上創建的,並且您正在運行某些* nixish,那麼當'dos2unix'被遺忘時這很自然;如果你在Windows上運行,你是以文本還是二進制打開文件?] – 2013-05-03 02:30:26

回答

0

你可能已經搞砸了將數據傳遞給函數。如果在函數中設置測試數組,它應該正確打印。

pass arrays in C++使用數組名稱。 例如

int main() 
{ 
    string productName[] = {"mango"}; 
    ... 
    printReport(productName, numofProduct); 
    return 0; 
} 
+0

這些數組似乎正在被正確傳遞,並且它們的傳遞方式與它們在程序中的其他四個函數中的傳遞方式相同似乎運行良好)。 – user2345261 2013-05-03 02:55:14

+0

@ user2345261正在猜測。垃圾輸出通常是由讀取錯誤的內存引起的,例如'productName [number_of_products]'或忘記初始化內存,例如'int num = 0;'。 – mikek3332002 2013-05-06 23:20:23