Я новичок в программировании и 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;
}
Теперь может быть хорошее время, чтобы узнать, как использовать отладчик шаг через строку кода по очереди, чтобы узнать, что может быть неправильным. –
Кстати, в функции 'readScores' вы можете посмотреть инструкцию' else'. Отступ не совпадает с фактическим кодом, возможно, вам не хватает пары фигурных скобок ('{}')? –
Логика в функции readScores просто неверна. Также существует непонимание того, как работают файлы. Довольно ясно, что вы ожидаете, что когда вы снова откроете файл, вы уже пройдете идентификатор студента, который вы читаете в первой функции. Но это не так, каждый раз, когда вы открываете файл, который вы возвращаете в начале. – john