2013-09-15 2 views
0

Я новичок в программировании и C++. Я работаю над назначением, которое требует от меня чтения данных из файла данных и хранения его в 2D-массив. Каждая строка в текстовом файле в следующем формате (тип данных INT)Чтение из файла данных в 2D-массив. Нет выхода. C++

XXXX XX XX XX XX ... (и так далее)

номер четыре цифры на самом деле студент ID и должен быть хранящиеся в отдельном массиве 1D. Я сделал эту часть, и у меня нет никаких проблем. Теперь остальные 2-значные числа должны быть сохранены в 2D-массиве с 4 столбцами и X-строками, где X - количество строк в файле данных.

Я написал следующий код, чтобы попытаться прочитать его. Он не дает ошибок и компилируется правильно, но когда я пытаюсь распечатать 2D-массив, используя cout, я ничего не получаю. Ничего. Посмотрите на следующий код и попробуйте помочь мне.

Я новичок в stackoverflow и программировании, поэтому, пожалуйста, простите меня, если код не отформатирован правильно или не соответствует традиции.

//___CODE____ 
#include<iostream> 
#include<iomanip> 
#include<fstream> 
#include<cstdlib> 
#include<string> 

using namespace std; 

//Global 
const int SIZE = 1000; 
int const col = 4; 
string fileName; 


//Function Prototypes 
int readId(int id[], int size); 
int readScores(int scores[][col], int size); 

//Main 
int main() 
{ 
int examScores[SIZE][col]; 
int id[SIZE] = {}; 

cout<<endl; 

readId(id, SIZE);         
readScores(examScores, SIZE);     



} 
//Declarations 

int readId(int id[], int size) 
{ 
ifstream inputFile; 
int count = 0; 
int total = 0; //Size of id [] OR no. of students. 
int temp = 0; 

//Takes the name of the data file from the user. 
//NOTE: The filename should include its extension. 
cout<<"Enter the name of the data file (including the extension):"; 
cin>>fileName; 

inputFile.open(fileName.c_str()); 

if(inputFile.is_open()) 
    { 
     while(inputFile >> temp) 
     { 
      if(count % 5 == 0) 
      { 
       id[total] = temp; 
       total++; 
      } 
      ++count; 
     } 
    } 

else 
    cout<<"Data file not found!"<<endl; // If this is executed make sure the data file 
             //is located in the same directory as this program. 
//To print the content of array. Check. 
for(int i=0; i < total; i++) 
    cout<<id[i]<<endl; 

return total; 
} 


int readScores(int scores[][col], int size) 
{ 
ifstream inputFile; 

int count = 0; 
int c = 0; //Counter for column. 
int total = 0; //No. of students. 
int temp = 0; 

inputFile.open(fileName.c_str()); 
if(inputFile.is_open()) 
    { 
     while(inputFile >> temp) 
     { 
      if(count % 5 != 0) 
      { 
       if (c < col) 
       { 
        scores[total][c] = temp; 
       } 
       else 
        total++; 
        c = 0; 
        scores[total][c] = temp; 
      } 
      ++count; 
      c++; 
     } 
    } 

else 
    cout<<"Data file not found!"<<endl; // If this is executed make sure the data file 
             //is located in the same directory as this program. 

//To print the contents of 2D array. Check. 
for (int r = 0; r < total; r++) 
{ 
    for (c = 0; c < col; c++) 
     { 
      cout<<setw(8)<<scores[r][col]; 
     } 
    cout<<endl; 
} 
return total; 
} 
+1

Теперь может быть хорошее время, чтобы узнать, как использовать отладчик шаг через строку кода по очереди, чтобы узнать, что может быть неправильным. –

+1

Кстати, в функции 'readScores' вы можете посмотреть инструкцию' else'. Отступ не совпадает с фактическим кодом, возможно, вам не хватает пары фигурных скобок ('{}')? –

+1

Логика в функции readScores просто неверна. Также существует непонимание того, как работают файлы. Довольно ясно, что вы ожидаете, что когда вы снова откроете файл, вы уже пройдете идентификатор студента, который вы читаете в первой функции. Но это не так, каждый раз, когда вы открываете файл, который вы возвращаете в начале. – john

ответ

0

Ваш остальное-себе неправильно, есть некоторые скобки отсутствуют (теперь вы всегда сбросить с до нуля)

+0

Спасибо за ваше время. Я прошу прощения, если я не могу ответить на вопрос. – user2781895

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