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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.97
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31
#1

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

15.05.2010, 19:03. Просмотров 4600. Ответов 8
Метки нет (Все метки)

Здравствуйте. Само задание:
Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными в режиме диалога и записывает массив в бинарный файл. Структура файла: в первых двух байтах размещается значение типа 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++
#include &lt;cstdio&gt; #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; struct MyStruct { char name; char...

Запись структуры в файл - C++
С клавиатуры вводится данные в структуру, и эту структуру надо напечатать в файл. Структура имеет вид: struct people { char*...

Запись структуры в файл - C++
Работаю в Borland C(чистый С) Нужно: Создать файл, который содержит ведомости об картотеке в регистратуре поликлинники. Данные должны...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.05.2010, 20:52 #8
а обязательно ли русские символы использовать??? =)
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31
15.05.2010, 22:38  [ТС] #9
Я русский использовал только чтобы писать что-то типа "Введите....", а сами данные на английском пишу. Пробовал
C++
1
setlocale
вообще убрать, не помогло.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2010, 22:38
Привет! Вот еще темы с ответами:

Запись структуры в файл - C++
Хочу записать структуру в файл. Но записывается только одна структура , последняя. #include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include...

Запись структуры в файл - C++
имеется одномерный массив типа структуры base struct base { String name; String work; String year; } каким образом...

Запись в файл структуры - C++
Есть структура Помогите реализовать запись в файл? Мой вариант не работает.... #include&quot;stdafx.h&quot; #include&quot;iostream&quot; ...

Запись структуры в файл - C++
Помогите найти ошибку в коде. Задание. Разработать программу на языке С + +, реализующей запись в файл информации о студенте (10...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.05.2010, 22:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru