Ifstream не получает данные с использованием массива в C ++ - PullRequest
0 голосов
/ 04 мая 2019

Я пытался читать данные из employee-info.txt, используя ifstream, и сохранял их в массиве, но он ничего не читал.

Основная цель моего кода - каждый раз, когдаон смог прочитать значение в employee-info.txt, он будет зациклен, и целочисленная переменная valueChecker будет увеличиваться на единицу.После завершения цикла будет возвращено значение valueChecker, чтобы определить, сколько строк извлекается из employee-info.txt.Основываясь на содержимом employee-info.txt, он должен вернуть значение int, равное 8, но возвращает только значение int, равное 0, что является инициализированным значением.

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

Вот код в Employee.h:

#pragma once
#include<string>
#include<iostream>

class Employee
{
public:
   struct EmployeeRecord {
     static const int recordSize = 100;
     static const int fieldSize = 4;
     std::string record[recordSize][fieldSize];
   };

public:
   Employee();
   ~Employee();
   int employeeDataChecker();
   void employeeWriteData();
   void employeeDisplayData();
   EmployeeRecord& employeeReturnRecordArray();

private:
   EmployeeRecord emp_record;

};

Employee.cpp:

#include "Employee.h"
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>

int Employee::employeeDataChecker()
{
    //Check if there are data in the employee-info.txt
    EmployeeRecord emp;
    int valueChecker = 0;
    std::ifstream inFile;
    inFile.open("C:\\Users\\RJ\\Desktop\\employee-info.txt");
    for (int index = 0; index < emp.recordSize; index++) {
        for (int index2 = 0; index2 < emp.fieldSize; index2++) {
            while (inFile >> emp.record[index][index2]) {
                valueChecker++;
            }
        }
    }
    inFile.close();
    return valueChecker;
}

employee-info.txt:

     ID           Firstname            Lastname                 Sales
      1                 Joe            Satriani             500000.00 

1 Ответ

0 голосов
/ 04 мая 2019

Да, во-первых, вы должны проверить, правильно ли открыт файл (т.е. inFile.is_open ()).

Затем забудьте итерацию на полях и попробуйте сделать что-то вроде этого:

int id;
char firstname[64] = { 0 };
char lastname[64] = { 0 };
float sales;

inFile >> id;
inFile.get(firstname, 64, ' ');
inFile.get(lastname, 64, ' ');
inFile >> sales;

В случае ошибки оператор [inFile >>] может вернуть false, а затем он не будет увеличивать valueChecker.

...