Я некоторое время работаю над этой программой, но отказывается сотрудничать на этом последнем небольшом участке. Точка программы состоит в том, чтобы просеять файл данных в три массива, отсортировать массивы и распечатать их в таблице. Проблема, с которой я столкнулась, похоже, со столом. Программа разделена на четыре функции, и когда я пытаюсь отлаживать, она не будет отображать массив 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
, но он полностью пуст в фактическом отчете. После некоторой отладки кажется, что после печати productName
в цикле for каждый элемент после этого перезаписывает имя продукта.
Например просто оставляя cout << setw(18) << productName[count] << setw(16) << numberinStock[count] << endl;
будет производить
"3s"
"10h"
"2а"
Названия продуктов есть Mangoes, Sandwich, и пицца.
Я в затруднении. Где я испортил?
Дикая догадка: все ваши 'productName' с '' \ r''? –
№. все они хранятся в файле .dat и похожи на обычные имена домохозяйств. (например, сейчас это манго, сэндвич и пицца). Кроме того, я обнаружил, что положить endl; сразу после productName, а затем остальная часть информации на второй строке помогает в значительной степени. В тот момент, когда я вводил setw, он вроде перезаписывает productName. – user2345261
То, что 'endl' помогает предположить, что у вас на самом деле есть' '\ r''s в ваших строках. На какой платформе вы работаете, и б) был ли файл создан? [Если файл был создан в Windows, и вы работаете над чем-то * nixish, это было бы естественно, когда 'dos2unix' был забыт; Если вы работаете в Windows, вы открыли файл как текстовый или двоичный?] –