DimaLepel
@DimaLepel

Как передать файл для записи в пользовательскую функцию C++?

Здравствуйте. Изучаю C++. Работаю с чтением и записью данных в файл. Напрямую написать реализацию в функции main смог. Но вот вынести в отдельные функции Создание файла, Запись данных и Считывание данных не могу. Видимо знаний не достаточно. Привожу код программы:
#include <iostream>
#include <fstream>
#include <Windows.h>

using namespace std;

struct PERSON {
  char name[20];
  unsigned age;
};

//new_DB();
//remove_DB();
//clear();
//int save_DB();
//load_DB();

int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  setlocale(LC_ALL,"Rus");

  PERSON dima;
  strcpy(dima.name, "Petrovich");
  dima.age = 15;

  char path[] = "db_person.txt";

  // Записываем в файл
//  ofstream fout;
//  fout.open(path, ofstream::app);
//
//  if(!fout.is_open()) {
//    cout << "Error!";
//  } else {
//    cout << "OK.\n";
//
//    fout.write((char *) &dima, sizeof(PERSON));
//
//  }
//
//  fout.close();

  // Читаем из файла
  ifstream fin;
  fin.open(path);

  if(!fin.is_open()) {
    cout << "Error!";
  } else {
    cout << "File is open!" << endl;
    cout << endl;

    PERSON prs;
    while(fin.read((char *) &prs, sizeof(PERSON))) {
      cout << prs.name << "\t";
      cout << prs.age << endl;
    }

  }

  fin.close();

  return 0;
}


Заранее Вам благодарен.
  • Вопрос задан
  • 1493 просмотра
Пригласить эксперта
Ответы на вопрос 1
@k0taperkot
1. std::ifstream, std::ofstream здесь - это Си++, всё остальное - это Си. Чтобы открыть с файл в Си используйте open.
2. using namespace std; - это плохо
3. Если цель писать на Си++, то в нем есть ссылки (помимо указателей); В Си есть указатели - используйте что-нибудь из этого, чтобы передать доступ к объекту в функцию
4. Если использовать не std::ifstream & std::ofstream, а std::fstream, то через этот стрим можно будет и читать и писать
5. Опять же - в Си++ есть std::string

В общем, почитайте сначала чем Си отличается от Си++ - смешивать их не очень клёво
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы