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

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

Войти
Регистрация
Восстановить пароль
 
ZorikPunk
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 15
#1

Структуры. Бинарник отображается в консоли некорректно. Исправить код - C++

13.01.2014, 14:29. Просмотров 178. Ответов 0
Метки нет (Все метки)

Есть код программы. Объясните пожалуйста, почему, когда я заполняю бинарник на char name[255];, а потом меняю [255], на другие числа, вроде [100] или [240], бинарник отображается в консоли некорректно? И почему при [254] или [256] работает?
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <tchar.h>
 
struct toy {
    char name[255];
    float price;
    int inclower;
    int incupper;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    // Переменная для выбора пункта меню
    int checkMenu;
 
    do {
        // Очистка экрана
        system("cls");
 
        // Вывод меню на экран
        // 1. Добавить данные об игрушке в файл
        printf("***  1  *** Добавить игрушки в файл\n");
        // 2. Вывести данные обо всех игрушках из файла
        printf("***  2  *** Вывести все игрушки из файла\n");
        // 3. Список игрушек по заданной стоимости и возрасту ребенка
        printf("***  3  *** Искать игрушки\n");
        // 4. Выход
        printf("\n***  4  *** Выход");
 
        // Ожидания ввода с клавиатуры пункта меню
        printf ("\n\nВыберите пункт меню: ");
        scanf("%d", &checkMenu);
 
        FILE *in, *out;
        toy curr_toy;
 
        switch (checkMenu) {
        // Если выбран пункт меню 1
        case 1:
            system("cls");
            int add;
            do {
                //toy curr_toy;
                // Введите название игрушки
                printf("Введите имя игрушки: ");
                scanf("%s", curr_toy.name);
 
                // Введите стоимость игрушки
                // Цикл do {} while реализован для проверки цены, чтобы она не была отрицательной
                do {
                    printf("Введите цену игрушки: ");
                    scanf("%f", &curr_toy.price);
                } while (curr_toy.price < 0);
 
                // Ввод верхней и нижней возрастной границы
                // В цикле do { } while реализована проверка чтобы возрастная нижняя граница была меьше верхней возрастной и была неотрицательной
                do {
                    printf("Введите минимальный возраст: ");
                    scanf("%d", &curr_toy.inclower);
 
                    printf("Введите максимальный возраст: ");
                    scanf("%d", &curr_toy.incupper);
                } while( !((curr_toy.inclower >= 0) && (curr_toy.inclower < curr_toy.incupper)) );
 
                // Записываем структурную переменную в файл "toys.bin"
                in = fopen("toys.bin","ab+");
                fwrite(&curr_toy, sizeof(curr_toy), 1, in);
                fclose(in);
                
                printf("\nДобавить еще? (0 - Нет, 1 - Да) : ");
                scanf("%d", &add);
            } while (add==1);
 
            break;
 
        // Если выбран пункт меню 2
        case 2:
            // Очистка экрана
            system("cls");
            // Вывод на экран шапки таблицы
            printf("+-----------------------------+----------------+-----------+------------+\n");
            printf("|            Название         |      Цена      |Минимальный|Максимальный|\n");
            printf("+-----------------------------+----------------+-----------+------------+\n");
 
            //toy curr_toy;
            // Открываем файл для чтения
            out = fopen("toys.bin","rb+");          
            while(!feof(out)) {
                fread(&curr_toy, sizeof(curr_toy), 1, out);
                // Вывод на экран всех игрушек
                printf ("|  %24s   |    %8.2f    |  %7d  |  %7d   |\n", curr_toy.name, curr_toy.price, curr_toy.inclower, curr_toy.incupper);
            };
            // Закрываем файловую переменную и таблицу
            fclose(out);
            printf("+-----------------------------+----------------+-----------+------------+\n");
 
            printf ("\n\nЖмякни кнопку");
            getch();
            break;
 
        // Если выбран пункт меню 3
        case 3:
            // Очистка экрана
            system("cls");
            // Ввод с клавиатуры заданной цены
            float disPrice;
            printf("Введите сумму денег, на которую расчитываете купить игрушку: ");
            scanf("%f", &disPrice);
            // Ввод с клавиатуры возраст ребенка
            int ageKid;
            printf("Введите возраст ребенка: ");
            scanf("%d", &ageKid);
            // Вывод шапки таблицы
            printf("+-----------------------------+----------------+-----------+------------+\n");
            printf("|            Название         |      Цена      |Минимальный|Максимальный|\n");
            printf("+-----------------------------+----------------+-----------+------------+\n");
 
            //toy curr_toy;
            // Открываем файл для чтения
            out = fopen("toys.bin","rb+");          
            while(!feof(out)) {
                fread(&curr_toy, sizeof(curr_toy), 1, out);
                // Выбераем для вывода на экран только те значения которые ниже заданной стоимости и подходят по возрасту ребенка
                if ((curr_toy.price <= disPrice) && (ageKid >= curr_toy.inclower) && (ageKid <= curr_toy.incupper)) {
                    printf ("|  %24s   |    %8.2f    |  %7d  |  %7d   |\n", curr_toy.name, curr_toy.price, curr_toy.inclower, curr_toy.incupper);
                }
            };
            // Закрытие файловой переменной и таблицы
            fclose(out);
            printf("+-----------------------------+----------------+-----------+------------+\n");
 
            printf ("\n\nЖмякни кнопку");
            getch();
            break;
 
        // Если выбран выход, то ничего не делаем и выходим из цикла
        case 4:
            break;
 
        default:
            // В случае неправильного ввода пункта меню, выдается сообщение
            printf("\nНеверный пункт меню!");
            break;
        }
 
    } while (checkMenu != 4);
 
    printf ("\n\nЖмякни кнопу");
    getch();
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2014, 14:29     Структуры. Бинарник отображается в консоли некорректно. Исправить код
Посмотрите здесь:

Запись структуры с строкой в бинарник - C++
Здравствуйте, уважаемые форумчане! Интересовал вопрос записи структуры, в который есть string, в бинарный файл. Нашел на форуме код и...

Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код - C++
Помогите с заданием, кто понимает. Составить программу формирования файла, содержащего Ведомость студентов, сдававших сессию, содержит...

Как компилировать программу C++ или код в бинарник (что бы запускался без участия ОС) - C++
Помогите пожалуйста как компилировать прогу написанную на с++ или код в бинарник (что бы запускался без участия ОС) И сразу второй вопрос...

Некорректно отображается содержимое файла - C++
Написал программку для чтения файла, файл считывается, но содержимое его отображается некорректно, например так: 0014FC. Подскажите метод...

Матрица char некорректно отображается - C++
Здравствуйте. Проблема в том что если очень большая размерность массива то символы отображает криво. подскажите как исправить. Пишу в...

Некорректно отображаются символы в консоли - C++
Как настроить вывод символов, чтобы консоль не переносила часть слова или числа?

Некорректно отображается кириллица в консольном приложении - C++
Есть код // Рис. 2.7: fig02_07.cpp // Программа вычисления среднего значения. Использует повторение, управляемое счетчиком. ...

Некорректно отображается символьный двумерный массив - C++
Здравствуйте, возникла такая проблема. Когда инициализирую обычную символьную переменную АСКИ кодом, то все отлично. А когда пытаюсь...

Не отображается результат в консоли - C++
Что не так ? Использую MSVS15 #include &lt;iostream&gt; using namespace std; int main() { const int ARRAY_LEN = 5; int...

Не отображается кириллица в консоли - C++
Что делать?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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