我一直在做這個程序一段時間,但它拒絕合作這最後一點點。程序的重點在於將數據文件篩選到三個數組中,對數組進行排序,然後將其打印到表中。我遇到的問題似乎與表格一致。該程序分爲四個函數,當我嘗試調試時,它不會在函數中顯示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」
的產品名稱有芒果,三明治,和比薩。
我不知所措。我在哪裏搞砸了?
瘋狂的猜測:所有'productName's以''\ r''結尾? – 2013-05-03 02:18:22
沒有。它們都存儲在一個.dat文件中,就像常用的家用名稱一樣。 (就像現在的芒果,三明治和披薩一樣)。另外,我發現把一個endl;在productName之後,然後讓第二行的其餘信息對主要有幫助。我介紹setw的那一刻,它有點覆蓋了productName。 – user2345261 2013-05-03 02:24:50
「endl」有助於暗示你確實在你的字符串中有「\ r''s。什麼平臺a)你在運行,和b)是創建的文件? [如果該文件是在Windows上創建的,並且您正在運行某些* nixish,那麼當'dos2unix'被遺忘時這很自然;如果你在Windows上運行,你是以文本還是二進制打開文件?] – 2013-05-03 02:30:26