2016-11-01 1 views
0

Я пишу этот код, где заполняю 2-мерный массив информацией из файла. Вот файл:Добавление элементов в двумерный массив C++

5 

Franks,Tom 2 3 8 3 6 3 5 

Gates,Bill 8 8 3 0 8 2 0 

Jordan,Michael 9 10 4 7 0 0 0 

Bush,George 5 6 5 6 5 6 5 

Heinke,Lonnie 7 3 8 7 2 5 7 

Теперь цифры собираются в массиве: data[50][8].

Я также суммирую все числа в каждой строке, которые я сделал. Я хочу добавить эту сумму в массив данных, чтобы она выглядела примерно как 2 3 8 3 6 5 3 30. Как мне это сделать? Вот весь мой код, если вы хотите увидеть:

int main() 
{ 

    ifstream fin; 
    char ch; 
    int data[50][8]; 
    string names[50]; 

    fin.open("empdata.txt"); 

    int sum = 0; 
    int numOfNames; 
    fin >> numOfNames; 

    for (int i = 0; i < numOfNames; i++) { 

     fin >> names[i]; 

     for (int j = 0; j < 7; j++) { 
      fin >> data[i][j]; 
     } 
      } 

     for (int i = 0; i < 5; i++) 
     { 

      for (int j = 0; j < 7; j++) 
      { 
       sum += data[i][j]; 

      } 
      cout << sum << endl; 
      sum = 0; 
     } 
} 

Вот новый код, который C650 помог мне. Это ничего не выводит в настоящее время: INT основной() {

ifstream fin; 
char ch; 
int data[50][8]; 
string names[50]; 

fin.open("empdata.txt"); 

int sum = 0; 
int numOfNames; 
fin >> numOfNames; 

for (int i = 0; i < numOfNames; i++) { 

    fin >> names[i]; 

    data[i][7] = 0; 

    for (int j = 0; j < 7; j++) { 
     fin >> data[i][j]; 
     data[i][7] += data[i][j]; 
    } 
} 

for (int i = 0; i < numOfNames; i++) 
{ 
    cout << data[i][7] << endl; 

} 



system("pause"); 
return 0; 

}

+0

Пожалуйста, отформатируйте файл ... – Charles

+0

Я просто сделал. Надеюсь, что поможет – Ralf

+0

Я бы порекомендовал вам использовать STL. «Std :: vector» действительно может помочь вам! – Charles

ответ

1

Следующая кажется, что вы пытаетесь сделать. Я укажу на недостатки в коде, который вы представили.

Это не лучший способ сделать это, но в соответствии с OP существуют некоторые ограничения, например, невозможность использования STL.

/* 1 */ #include <fstream> 
/* 2 */ #include <iostream> 
/* 3 */ #include <string> 
/* 4 */ 
/* 5 */ using namespace std; 
/* 6 */ int main() 
/* 7 */ { 
/* 8 */ 
/* 9 */  ifstream fin; 
/* 10 */  int data[50][8]; 
/* 11 */  string names[50]; 
/* 12 */ 
/* 13 */  fin.open("test.txt"); 
/* 14 */ 
/* 15 */  int numOfNames; 
/* 16 */  fin >> numOfNames; 
/* 17 */ 
/* 18 */  for (int i = 0; i < numOfNames; i++) { 
/* 19 */ 
/* 20 */   fin >> names[i]; 
/* 21 */ 
/* 22 */   data[i][7] = 0; /* use last spot in array for sum, set to 0. */ 
/* 23 */   for (int j = 0; j < 7; j++) { 
/* 24 */    fin >> data[i][j]; 
/* 25 */    data[i][7] += data[i][j]; 
/* 26 */   } 
/* 27 */  } 
/* 28 */ 
/* 29 */  for (int i = 0; i < numOfNames; i++) 
/* 30 */  { 
/* 31 */   cout << data[i][7] << endl; /* add each element to the sum here*/ 
/* 32 */  } 
/* 33 */  return 0; 
/* 34 */ } 

У ОП возникла проблема, при которой выходной сигнал не генерировался. OP, вы должны убедиться, что ваш входной файл имеет правильное имя ...

+0

Хорошо, похоже, что это сработает, но теперь ничего не выводит. Вот код – Ralf

+0

данные [i] [7] + = данные [i] [j]; \t \t} \t} \t для (INT I = 0; г Ralf

+0

ohhh, который не прошел вправо, держись, я просто отредактирую мой главный вопрос – Ralf

0

Как я уже сказал в других подобных сообщениях: Используйте структуру для моделирования записи.

struct Record 
{ 
    std::string last_name; 
    std::string first_name; 
    unsigned int grades[MAXIMUM_GRADES]; 
}; 

Это позволяет иметь множество смешанных типов:

Record student_info[MAXIMUM_STUDENTS]; 

Чтобы сделать чтение из файла проще, вы можете перегрузить operator>> внутри структуры:

struct Record 
{ 
    //... 
    friend std::istream& operator>>(std::istream& input, Record& r); 
}; 

std::istream& operator>>(std::istream& input, Record r) 
{ 
    std::getline(input, r.last_name, ','); 
    std::getline(input, r.first_name, ' '); 
    for (unsigned int i = 0; i < MAXIMUM_GRADES; ++i) 
    { 
    input >> r.grades[i]; 
    } 
    return input; 
} 

Это упрощает ваш входной контур:

for (unsigned int i = 0; i < MAXIMUM_STUDENTS; ++i) 
{ 
    my_data_file >> student_info[i]; 
} 

Слишком плохо, что вы не можете использовать std::vector. std::vector идеально подходит для чтения из файлов , особенно если вы не знаете размер файла.

+0

Этот парень все еще не о матрице, как он мог понять структуру? – Real73

+0

@ShahrairNazimReal: зависит от курса обучения и порядка обсуждаемых тем. Нет необходимости обсуждать массивы перед структурами. Структуры могут обсуждаться перед массивами. –

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

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