Форум программистов, компьютерный форум CyberForum.ru

Запись/вывод структуры в файл - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.97
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31
15.05.2010, 19:03     Запись/вывод структуры в файл #1
Здравствуйте. Само задание:
Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными в режиме диалога и записывает массив в бинарный файл. Структура файла: в первых двух байтах размещается значение типа int, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах. Написать функцию, которая запрашивает данные о сканере в режиме диалога и замещает записи в бинарном файле по заданному номеру. Обязательный параметр — номер замещаемой записи. Функция должна возвращать нулевое значение, если запись прошла успешно, и -1 в противном случае. Привести пример программы, оздающей файл с данными о сканерах (данные вводятся с клавиатуры) из не менее восьми записей и осуществляющий вставку новых данных о сканере.
Все необходимые данные для функций должны передаваться им в качестве параметров.
Использование глобальных переменных в функциях не допускается.

Я вроде реализовал воод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "fstream"
#include "iostream"
using namespace std;
 
struct scan_info{
    char model[25]; // наименование модели
    int price; // цена
    double x_size; // горизонтальный размер области сканирования
    double y_size; // вертикальный размер области сканирования
    int optr; // оптическое разрешение
    int grey; // число градаций серого
};
 
void write_file(const char *file_name, const int num_w);
 
int main(){
    setlocale(LC_CTYPE, "Russian_Russia.1251");
    cout << "Введите имя файла для записи:";
    char file_name[15];
    cin >> file_name;
    cout << "Введите число записей:";
    int num_w;
    cin >> num_w;
    cin.ignore(1);
    write_file(file_name, num_w);
    system("pause");
    return 0;
}
 
void write_file(const char *file_name, const int num_w){
    scan_info *Scaners = new scan_info[num_w];
    ofstream fout(file_name, ios::out | ios::binary);
    if(fout.fail()){
        cerr << "Ошибка открытия выходного файла";
        exit(1);
    }
    fout.write((char*)&num_w,2);
    /*Ввод структуры*/
    for(int i=0; i<num_w; i++){
        cout << "\nЗапись №"<<i+1;
        cout << "\nВведите модель:";
        cin.getline(Scaners[i].model, 24);
        fout.write(Scaners[i].model, sizeof Scaners[i].model);
        cout << "Введите цену:";
        cin >> Scaners[i].price;
        fout.write((char*)&Scaners[i].price, 5);
        cout << "Введите горизонтальный размер области сканирования:";
        cin >> Scaners[i].x_size;
        fout.write((char*)&Scaners[i].x_size, 5);
        cout << "Введите вертикальный размер области сканирования:";
        cin >> Scaners[i].y_size;
        fout.write((char*)&Scaners[i].y_size, 5);
        cout << "Введите оптическое разрешение:";
        cin >> Scaners[i].optr;
        fout.write((char*)&Scaners[i].optr, 5);
        cout << "Введите число градаций серого:";
        cin >> Scaners[i].grey;
        fout.write((char*)&Scaners[i].grey, 5);
        cin.ignore(1);
    }
    fout.close();
}
Подскажите, всё ли верно? А то в файле китайские иероглифы какие-то, только слова норм? И как потом такой файл считать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2010, 19:03     Запись/вывод структуры в файл
Посмотрите здесь:

Запись структуры в файл... C++
Запись структуры в файл. C++
C++ запись структуры в файл
Запись структуры в файл C++
C++ Запись в файл и вывод структуры через под программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Adler
 Аватар для Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
15.05.2010, 19:39     Запись/вывод структуры в файл #2
C++
1
2
std::locale loc("Russian");
std::locale::global(loc);
+
C++
1
2
std::locale loc("Russian");
std::cout.imbue(loc);
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31
15.05.2010, 19:50  [ТС]     Запись/вывод структуры в файл #3
Всё равно. Именно с цифрами проблема. Как их правильно преобразовать и вывести в файл?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
15.05.2010, 19:56     Запись/вывод структуры в файл #4
ostream::write это неформатированный вывод, тебе же надо пользоваться форматированным.
тобишь юзай оператор <<
и вместо подобного:
C++
1
fout.write((char*)&Scaners[i].price, 5);
пиши
C++
1
fout << Scaner[i].price
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31
15.05.2010, 20:15  [ТС]     Запись/вывод структуры в файл #5
Да точно!) Не знаю чего меня потянуто ввести .write. Но в файле всё равно иероглифы. Как я понимаю это из-за того что файл бинарный? Тогда как мне потом выводить файл? И ещё получается что цифры слипаются, нужно дописать добавление пробела после каждой цифры?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
15.05.2010, 20:24     Запись/вывод структуры в файл #6
Цитата Сообщение от DJFile Посмотреть сообщение
Но в файле всё равно иероглифы. Как я понимаю это из-за того что файл бинарный?
ищи проблему в другом, может быть в чтении
C++
1
2
3
4
5
6
7
#include <fstream>
 
int main()
{
   std::ofstream ofs("file.txt", std::ios::binary);
   ofs << 5 << " текст " << 6;
}
содержимое файла:
Код
5 текст 6
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31
15.05.2010, 20:33  [ТС]     Запись/вывод структуры в файл #7
Да, так вводит... Я уже даже придумать не могу в чём проблема может быть, не то что понять(
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
15.05.2010, 20:52     Запись/вывод структуры в файл #8
а обязательно ли русские символы использовать??? =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2010, 22:38     Запись/вывод структуры в файл
Еще ссылки по теме:

C++ Запись структуры в файл
запись структуры в файл C++
Запись в файл структуры C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31
15.05.2010, 22:38  [ТС]     Запись/вывод структуры в файл #9
Я русский использовал только чтобы писать что-то типа "Введите....", а сами данные на английском пишу. Пробовал
C++
1
setlocale
вообще убрать, не помогло.
Yandex
Объявления
15.05.2010, 22:38     Запись/вывод структуры в файл
Ответ Создать тему
Опции темы

Текущее время: 02:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru