我一直在做这个程序一段时间,但它拒绝合作这最后一点点。程序的重点在于将数据文件筛选到三个数组中,对数组进行排序,然后将其打印到表中。我遇到的问题似乎与表格一致。该程序分为四个函数,当我尝试调试时,它不会在函数中显示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