2015-11-24 5 views
-1

Цель программы - заполнить два массива из данных в файле, первый столбец - номер отдела, а второй - коробки. Там должно быть не более 15 отделов, переменные departmentNumber и boxesSold должны получать данные из файла перед заполнением массиваПроблема с заполнением параллельных массивов из файла при проверке существующих элементов

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    int departmentNumber = 0, boxesSold = 0; 

    ifstream inputFile("boxes.txt"); 

    const int SIZE = 15; 
    int departmentArray[SIZE]; 
    int boxesArray[SIZE]; 

    int count = 0; 

    while (count < SIZE && inputFile); 
    { 
     inputFile >> departmentNumber; 
     inputFile >> boxesSold; 

     for (int index = 0; index < count; index++) 
     { 
      if (departmentArray[index]== departmentNumber) 
      { 
       boxesArray[index] = boxesArray[index] + boxesSold; 
      } 
      else 
      { 
       departmentArray[index] = departmentNumber; 
       boxesArray[index] = boxesSold; 
       count++; 
      } 

     } 
     inputFile.close(); 
    } 

    //display numbers 
    for (int i = 0; i < count; i++) 
    { 
     cout << departmentArray[i] << " "; 
     cout << boxesArray[i]; 
     cout << endl; 
    } 
    system("pause"); 
} 

выходной ток пустым. my for loop ищет массив, чтобы узнать, существует ли уже номер departmentNumber, мой цикл while продолжает принимать данные из файла, а последний для цикла отображает номер. Застрял на этом слишком долго.

int count = 0; 

     while (count < SIZE && inputFile) 
     { 
      inputFile >> departmentNumber; 
      inputFile >> boxesSold; 

      for (int index = 0; index < count; index++) 
      { 
       if (departmentArray[index] == departmentNumber) 
       { 
        boxesArray[index] = boxesArray[index] + boxesSold; 

       } 
       else 
       { 
        departmentArray[count] = departmentNumber; 
        boxesArray[count] = boxesSold; 

       } 
      } 
      boxesArray[count] = boxesSold; 
      count++; 
     } 
      inputFile.close(); 

я обновил код и следующий вывод дается, я думаю, для цикла, что и индекс/счетчик не правильно заявил,

-858993460 23 
410 17 
410 16 
120 14 
150 32 
300 27 
410 11 
410 10 
120 8 
150 16 
120 2 
300 4 
410 5 
520 6 
390 7 
Press any key to continue . . . 
+0

Для начала, вы делаете while (count AlexanderVX

+0

Да, 'while (count

+0

Связанный: http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong –

ответ

0

Вы не обрабатывает случай, когда вы сначала начинаете. Что происходит, когда count = 0? Вы никогда не вводите цикл for.

Я предлагаю более простой способ использовать std::map<int, int>. И сделать что-то вроде этого внутри цикла чтения:

map[departmentNumber] += boxesSold; 

Это делает следующее:

  1. Если departmentNumber существует на карте, она увеличивает boxesSold.
  2. Если departmentNumber не существует на карте, он добавляет его со значением, равным 0, а затем увеличивает его на boxesSold.
+0

std будет проще, но спецификации не позволяют этого, вложенные циклы и массивы, базовые материал раннего уровня – mattvondu

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

  • Нет связанных вопросов^_^