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

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

Восстановить пароль Регистрация
 
ZorikPunk
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 15
13.01.2014, 14:29     Структуры. Бинарник отображается в консоли некорректно. Исправить код #1
Есть код программы. Объясните пожалуйста, почему, когда я заполняю бинарник на 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++
Как компилировать программу C++ или код в бинарник (что бы запускался без участия ОС) C++
Исправить чтобы окно консоли не изчезало C++
C++ Некорректно отображается содержимое файла
C++ Структуры в С++ и вывод студентов со средним баллом больше 7. Исправить код
C++ Некорректно отображается символьный двумерный массив
C++ Исправить сортировку структуры
Не правильно отображается текст html в консоли C++

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

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

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