2013-05-03 2 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, но он полностью пуст в фактическом отчете. После некоторой отладки кажется, что после печати productName в цикле for каждый элемент после этого перезаписывает имя продукта.

Например просто оставляя cout << setw(18) << productName[count] << setw(16) << numberinStock[count] << endl;

будет производить

"3s"
"10h"
"2а"

Названия продуктов есть Mangoes, Sandwich, и пицца.

Я в затруднении. Где я испортил?

+0

Дикая догадка: все ваши 'productName' с '' \ r''? –

+0

№. все они хранятся в файле .dat и похожи на обычные имена домохозяйств. (например, сейчас это манго, сэндвич и пицца). Кроме того, я обнаружил, что положить endl; сразу после productName, а затем остальная часть информации на второй строке помогает в значительной степени. В тот момент, когда я вводил setw, он вроде перезаписывает productName. – user2345261

+1

То, что 'endl' помогает предположить, что у вас на самом деле есть' '\ r''s в ваших строках. На какой платформе вы работаете, и б) был ли файл создан? [Если файл был создан в Windows, и вы работаете над чем-то * nixish, это было бы естественно, когда 'dos2unix' был забыт; Если вы работаете в Windows, вы открыли файл как текстовый или двоичный?] –

ответ

0

Возможно, вы перевернули данные в функцию. Если вы настроите тестовые массивы в функции, она должна печататься правильно.

pass arrays in C++ использовать arrayname. например

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

Массивы, похоже, передаются правильно, и они передаются так же, как и в других четырех функциях программы (что кажется, работает нормально). – user2345261

+0

@ user2345261 Делал гадать. Вывод мусора часто вызван чтением неправильной памяти, например 'productName [number_of_products]' или забыванием инициализировать память, например 'int num = 0;'. – mikek3332002

Смежные вопросы