Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/33: Рейтинг темы: голосов - 33, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 02.03.2020
Сообщений: 106
1

Визуализация кода

27.04.2020, 12:31. Показов 6305. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите сделать код визуально лучше, я из себя уже выжал что мог.

Кликните здесь для просмотра всего текста
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/*Структура ТРАНСПОРТНИЙ ЗАСІБ: марка, потужність, вартість, дата реєстрації, колір, номер.
Написати функцію створення бінарного файлу і внесення в нього нових записів, значення яких вводяться з клавіатури;
Написати функцію виведення інформації з файлу на екран з шапкою;
Написати функцію доповнення вже існуючого файлу структур новими структурами;
Написати функцію пошуку структур із заданими ознаками (наприклад, за заданому діапазону значень елемента);
Написати функцію упорядкування файлу структур по заданому полю (елементу).
*/
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>                /*Подключаем нужные для работы библиотеки*/
#include <string.h>
#include <Windows.h>
#include <vector>
 
using namespace std;
 
struct Transport
{
    char mk[64];        // Марка автомобиля
    int power;         // Модель автомобиля
    int cost;          // Цена
    int date;          // Год выпуска
    char color[64];     // Модель автомобиля
    char number[64];    // Фотография
 
};
 
typedef char* Name;             // Тип данных для имени файла
typedef FILE File;              // Тип данных для файловой переменной
Name NameFile = new char[32];   // Переменная для имени файла
File* file;                     // Переменная файла
Transport Avto;                 // Перменная для структуры Transport
int flag = 0;                   // Флаг для открытия файла
 
void Menu(void) // Меню программы
{
    system("cls"); // Очистка экрана консоли
    cout << "МЕНЮ" << endl
        << "1.Создание / открытие базы автомобилей" << endl
        << "2.Добавление автомобиля в базу" << endl
        << "3.Просмотр всей базы" << endl
        << "4.Поиск автомобилей мощностью выше 250 л.с" << endl
        << "0.Выход [ESC]" << endl;
}
 
void VvodAvto(Transport& Avto) // Ввод данных в структуру
{
    cout << "<Добавление автомобиля>" << endl;
    cout << "Марка автомобиля: ";
    cin.getline(Avto.mk, 8);
    cin.clear();
    cout << "Мощность автомобиля: ";
    cin >> Avto.power;
    cin.get();
    cout << "Цена автомобиля (в $.): ";
    cin >> Avto.cost;
    cin.get();
    cout << "Дата регистрации автомобиля: ";
    cin >> Avto.date;
    cin.get();
    cout << "Цвет автомобиля: ";
    cin.getline(Avto.color, 8);
    cin.clear();
    cout << "Номер автомобиля: ";
    cin.getline(Avto.number, 8);
    cin.clear();
}
 
void Show_Avto(Transport Avto) // Вывод данных об автомобилях
{
    cout << "Марка автомобиля: " << Avto.mk << endl;
    cout << "Мощность автомобиля: " << Avto.power << endl;
    cout << "Цена автомобиля (в $.): " << Avto.cost << endl;
    cout << "Дата регистрации автомобиля: " << Avto.date << endl;
    cout << "Цвет автомобиля: " << Avto.color << endl;
    cout << "Номер автомобиля: " << Avto.number << endl;
 
}
 
void CreatOpenFile(Name& NameFile, int& flag) // Создание/открытие файла базы данных
{
    char Causelove;
    flag = 0;
    cout << "Введите имя файла(с любовью): ";
    cin >> NameFile;
    file = fopen(NameFile, "r");                   // Права на чтение файла
    if (file == NULL)
    {
        do
        {
            system("cls");
            cout << "Файла " << NameFile << " " << "не существует" << endl;
            cout << "Создать файл " << NameFile << " ?" << endl;
            cout << "Нажмите Y / N" << endl;
            Causelove = getch();
            if (Causelove == 'Y' || Causelove == 'y') // Исключаем проблему зажатого CAPSLOCK
            {
                file = fopen(NameFile, "w");          // Права на запись файла
                cout << "Файл создан (Когратюлэйнш)" << endl;
                system("pause");
                flag = 1;
                fclose(file);
            }
            if (Causelove == 'N' || Causelove == 'n') // Исключаем проблему зажатого CAPSLOCK
            {
                cout << "Файл не создан (не когратюлэйнш)" << endl;
                system("pause");
                fclose(file);
            }
        } while (!(Causelove == 'Y' || Causelove == 'y' || Causelove == 'N' || Causelove == 'n'));
    }
    else
    {
        flag = 1;
        fclose(file);
        cout << "Файл успешно открыт (Когратюлэйнш)" << endl;
        system("pause");
    }
}
 
void RecordAvto(Name NameFile, Transport& Avto, int flag) // Добавление автомобиля в базу
{
    if (flag)
    {
        file = fopen(NameFile, "a");
        VvodAvto(Avto);
        fwrite(&Avto, sizeof(Avto), 1, file);
        fclose(file);
    }
    else
    {
        cout << endl << "Выберите файл для работы" << endl;
        cout << "Выберите пункт 1 в меню" << endl;
        getch();
    }
}
 
void ShowFile() // Вывод файла на экран
{
    int i = 0;
    if (flag)
    {
        file = fopen(NameFile, "r");
        cout << "База автомобилей" << endl << endl;
        while (fread(&Avto, sizeof(Transport), 1, file))
        {
            cout << "Номер записи: " << i + 1 << endl << endl;
            Show_Avto(Avto);
            cout << endl << endl;
            i++;
 
        }
        getch();
        fclose(file);
    }
    else
    {
        cout << "Выберете файл для работы" << endl;
        cout << "Выберите пункт 1 в меню" << endl;
        getch();
    }
}
 
long filesize(File* file) // Размер файла
{
    long curpos, length;
 
    curpos = ftell(file); // Запоминаем текущее положение
    fseek(file, 0L, SEEK_END); // Переходим в конец
    length = ftell(file); // Запоминаем положение в конце
    fseek(file, curpos, SEEK_SET); //Перемещаем на старое положение
    return length;
}
 
void SearchTransport(Name NameFile, Transport& Avto, int flag) // Поиск нужного автомобиля
{
    if (flag)
    {
        vector <Transport> vec_auto;
        file = fopen(NameFile, "r");
        fread(&Avto, sizeof(Transport), 1, file);
        int fflag = 0;
 
        double hp;
        cout << "Enter the required amount of horsepower" << endl;
        cin >> hp;
 
        file = fopen(NameFile, "r");
        while (fread(&Avto, sizeof(Transport), 1, file))
        {
            if (Avto.power > hp)                                 // Условия поиска автомобиля
                vec_auto.push_back(Avto);
        }
 
        for (unsigned int iter = 0; iter < vec_auto.size(); ++iter) {
            cout << "Сar model : " << vec_auto.at(iter).mk << endl;
            cout << "Car power: " << vec_auto.at(iter).power << endl;
            cout << "Car cost (in $.): " << vec_auto.at(iter).cost << endl;            /*Вивод информации о найденом автомобиле*/
            cout << "Registration date: " << vec_auto.at(iter).date << endl;
            cout << "Car color: " << vec_auto.at(iter).color << endl;
            cout << "Plate number: " << vec_auto.at(iter).number << endl;
            cout << "*********************************" << endl;
        }
 
        getch();
        fclose(file);
    }
    else
    {
        cout << endl;
        cout << "Выберите файл для работы" << endl
            << "Выберите пункт 1 в меню";
        getch();
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");   // Русификация (Понимание русского языка)
    char Causelove;
    system("cls");
    do
    {
        Menu();
        Causelove = getch();
        switch (Causelove)
        {
        case '1':   system("cls");
            CreatOpenFile(NameFile, flag);
            break;
        case '2':   system("cls");
            RecordAvto(NameFile, Avto, flag);
            break;
        case '3':   system("cls");
            ShowFile();
            break;
        case '4':   system("cls");
            SearchTransport(NameFile, Avto, flag);
            break;
        case '0':
            exit(1);
        }
    } while (Causelove != 27);
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2020, 12:31
Ответы с готовыми решениями:

Визуализация
Добрый день, подскажите пожалуйста, чем лучше отображать 2d графику - хочу поиграться с алгоритмами...

Визуализация
Здравствуйте, уважаемые форумчане. Хотелось бы узнать, возможно ли визуализировать(создать...

Примитивная 3D-визуализация
Всем привет. Возникла довольно простая задача: необходимо визуализировать в трехмерном виде...

Визуализация Алгоритма А*
Пишу курсовую на тему &quot;Визуализация Алгоритма А* с помощью OpenGL&quot; Подскажите с Актуальностью...

18
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
27.04.2020, 15:03 2
Лучший ответ Сообщение было отмечено Evreii как решение

Решение

Цитата Сообщение от Evreii Посмотреть сообщение
я из себя уже выжал что мог.
C++
1
2
3
4
5
6
7
8
9
        for (unsigned int iter = 0; iter < vec_auto.size(); ++iter) {
            cout << "Сar model : " << vec_auto.at(iter).mk << endl;
            cout << "Car power: " << vec_auto.at(iter).power << endl;
            cout << "Car cost (in $.): " << vec_auto.at(iter).cost << endl;            /*Вивод информации о найденом автомобиле*/
            cout << "Registration date: " << vec_auto.at(iter).date << endl;
            cout << "Car color: " << vec_auto.at(iter).color << endl;
            cout << "Plate number: " << vec_auto.at(iter).number << endl;
            cout << "*********************************" << endl;
        }
а так пробовали:
C++
1
2
3
4
5
6
7
8
9
        for (unsigned int iter = 0; iter < vec_auto.size(); ++iter) 
        {   cout << "Сar model        : " << vec_auto.at(iter).mk     << endl
                 << "Car power        : " << vec_auto.at(iter).power  << endl
                 << "Car cost (in $.) : " << vec_auto.at(iter).cost   << endl
                 << "Registration date: " << vec_auto.at(iter).date   << endl
                 << "Car color        : " << vec_auto.at(iter).color  << endl
                 << "Plate number     : " << vec_auto.at(iter).number << endl
                 << "*********************************"               << endl;
        }
?

и ещё что всегда режет мой глаз и терзает мою душу)
это когда часть кода спрятана за правой границей окна редактора.

Код желательно(а для меня и обязательно)
ВСЕГДА ДЕРЖАТЬ ПОЛНОСТЬЮ ВИДИМЫМ В ПРЕДЕЛАХ ВЕРТИКАЛЬНЫХ ГРАНИЦ РЕАДАКТОРА!

Добавлено через 4 минуты
Evreii, ещё пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void VvodAvto(Transport& Avto) // Ввод данных в структуру
{
    cout << "<Добавление автомобиля>" << endl;
    cout << "Марка автомобиля: ";
    cin.getline(Avto.mk, 8);
    cin.clear();
    cout << "Мощность автомобиля: ";
    cin >> Avto.power;
    cin.get();
    cout << "Цена автомобиля (в $.): ";
    cin >> Avto.cost;
    cin.get();
    cout << "Дата регистрации автомобиля: ";
    cin >> Avto.date;
    cin.get();
    cout << "Цвет автомобиля: ";
    cin.getline(Avto.color, 8);
    cin.clear();
    cout << "Номер автомобиля: ";
    cin.getline(Avto.number, 8);
    cin.clear();
}
C++
1
2
3
4
5
6
7
8
9
10
11
///-----------------------------------------------------Ввод данных в структуру:
void VvodAvto(Transport& Avto)
{
    cout << "<Добавление автомобиля>" << endl;
    cout << "Марка            : "; cin.getline(Avto.mk, 8)    ; cin.clear();
    cout << "Мощность         : "; cin >> Avto.power          ; cin.get  ();
    cout << "Цена  (в $.)     : "; cin >> Avto.cost           ; cin.get  ();
    cout << "Дата регистрации : "; cin >> Avto.date           ; cin.get  ();
    cout << "Цвет             : "; cin.getline(Avto.color , 8); cin.clear();
    cout << "Номер            : "; cin.getline(Avto.number, 8); cin.clear();
}
здесь каждая строка это цельная неделимая операция! (если хотите это сишный ручной ооп )
и на экране такой вывод будет смотреться посимпотичнее т.к. похож на таблицу.

или вот чисто по коду:
у вас снарядом разорвало цикл for тут:
C++
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
void ShowFile() // Вывод файла на экран
{
    int i = 0;
    if (flag)
    {
        file = fopen(NameFile, "r");
        cout << "База автомобилей" << endl << endl;
        while (fread(&Avto, sizeof(Transport), 1, file))
        {
            cout << "Номер записи: " << i + 1 << endl << endl;
            Show_Avto(Avto);
            cout << endl << endl;
            i++;
 
        }
        getch();
        fclose(file);
    }
...
вот я собрал его в кучу:
C++
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
void ShowFile() // Вывод файла на экран
{
    if (flag)
    {
        file = fopen(NameFile, "r");
        cout << "База автомобилей\n\n";
        for (int i = 1; fread(&Avto, sizeof(Transport), 1, file); i++)
        {
            cout << "Номер записи: " << i << "\n\n";
            Show_Avto(Avto);
            cout << endl << endl;
        }
        getch();
        fclose(file);
    }
...
оператор endl работает медленно, желательно им не злоупотреблять.

и тд и тп..
1
1 / 1 / 0
Регистрация: 02.03.2020
Сообщений: 106
27.04.2020, 17:42  [ТС] 3
Очень вам благодарен!

Добавлено через 40 минут
Цитата Сообщение от XLAT Посмотреть сообщение
режет мой глаз и терзает мою душу
Не могли бы вы еще как-то помочь избавиться от вложенности тут:
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
void CreatOpenFile(Name& FileName, int& flag) // Создание/открытие файла базы данных
{
    char Causelove;
    flag = 0;
    cout << "Enter File name: "; cin >> FileName;
    file = fopen(FileName, "r");                   // Права на чтение файла
    if (file == NULL)
    {
        do
        {
            system("cls");
            cout << "File " << FileName << " " << "doesn't exist" << endl;
            cout << "Create file " << FileName << "?" << endl;
            cout << "Press Y / N" << endl;
            Causelove = getch();
            if (Causelove == 'Y' || Causelove == 'y') // Исключаем проблему зажатого CAPSLOCK
            {
                file = fopen(FileName, "w");          // Права на запись файла
                cout << "File created (Когратюлэйнш)" << endl;
                system("pause");
                flag = 1;
                fclose(file);
            }
            if (Causelove == 'N' || Causelove == 'n') // Исключаем проблему зажатого CAPSLOCK
            {
                cout << "File not created (Не когратюлэйнш)" << endl;
                system("pause");
                fclose(file);
            }
        } while (!(Causelove == 'Y' || Causelove == 'y' || Causelove == 'N' || Causelove == 'n'));
    }
    else
    {
        flag = 1;
        fclose(file);
        cout << "File opened successfully (Когратюлэйнш)" << endl;
        system("pause");
    }
}
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.04.2020, 17:52 4
Цитата Сообщение от XLAT Посмотреть сообщение
iter < vec_auto.size();
зачем на каждой итерации запрашиваешь размер?

Цитата Сообщение от XLAT Посмотреть сообщение
vec_auto.at(iter)
в чем сакральный смысл использовать at ?

и зачем ты на каждой новой строке его заново дергаешь?

Цитата Сообщение от XLAT Посмотреть сообщение
<< endl
нафига ты везде юзаешь endl ?

C++
1
2
3
4
5
6
7
8
for (const auto& object: vec_auto) 
    cout << "Сar model : "        << object.mk     << '\n'
         << "Car power: "         << object.power  << '\n'
         << "Car cost (in $.): "  << object.cost   << '\n'
         << "Registration date: " << object.date   << '\n'
         << "Car color: "         << object.color  << '\n'
         << "Plate number: "      << object.number << '\n'
         << "*********************************"    << '\n';
0
1 / 1 / 0
Регистрация: 02.03.2020
Сообщений: 106
27.04.2020, 17:59  [ТС] 5
Цитата Сообщение от hoggy Посмотреть сообщение
нафига ты везде юзаешь endl ?
Спасибо, это тоже исправил еще благодаря советамXLAT,
Цитата Сообщение от XLAT Посмотреть сообщение
оператор endl работает медленно, желательно им не злоупотреблять.
.
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
27.04.2020, 18:10 6
Цитата Сообщение от hoggy Посмотреть сообщение
нафига ты везде юзаешь endl ?
если на то пошло, то правильно так:
C++
1
2
3
4
5
6
7
8
for (const auto& object: vec_auto) 
    cout << "Сar model : "        << object.mk     << '\n'
         << "Car power: "         << object.power  << '\n'
         << "Car cost (in $.): "  << object.cost   << '\n'
         << "Registration date: " << object.date   << '\n'
         << "Car color: "         << object.color  << '\n'
         << "Plate number: "      << object.number << '\n'
         << "*********************************"    << endl;
в том случае если захочется перенаправлять лог в файл, чтобы этот лог после вызова записи не зависал в воздухе.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.04.2020, 18:26 7
Цитата Сообщение от XLAT Посмотреть сообщение
если на то пошло, то правильно так:
считаю, что это категорически не правильно.

Цитата Сообщение от XLAT Посмотреть сообщение
в том случае если захочется перенаправлять лог в файл,
потому что функция должна выполнять строго одну задачу,
не должна додумывать за клиентов, что им там вдруг ещё может захотеццо.

а если не захочется?

корректный дизайн:
C++
1
std::cout << obj << std::endl;
некорректный дизайн:
C++
1
std::cout << obj; // <--- флюшит данные, даже если её об этом никто не просил

если уж докалебываццо, тогда до последнего '\n'

C++
1
2
3
4
5
6
7
8
9
10
11
    if(!vec_auto.empty())
    {
        auto last = vec_auto.cend();
        --last ;
        for (auto i = vec_auto.cbegin(); i != last; ++i) 
            std::cout << *i << '\n';  // <--- умеет выводиться в std::basic_ostream<>
        
        std::cout << *last ; // // <--- никаких '\n'
    }
    else
        std::cout << "empty data";  // <--- никаких '\n'
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
27.04.2020, 18:33 8
Цитата Сообщение от hoggy Посмотреть сообщение
потому что функция должна выполнять строго одну задачу,
нет это не функция.

функция должна выдавать разный выход, который зависит от того, что у ней не входе.
если я на вход подаю объект дисплея то вывод на дисплей,
если же объект файла, то вывод в файл.

Что тут может быть неясно?

это общее, а не про код автора.
0
1 / 1 / 0
Регистрация: 02.03.2020
Сообщений: 106
27.04.2020, 18:36  [ТС] 9
XLAT, извините за навязчивость но эта вложенность не даёт мне покоя, я понимаю что от неё можно избавиться но вот проблема в исполнении. Я думал чтобы упростить просто взять и открывать всё время один и тот же файл например вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void CreatOpenFile() // Создание/открытие файла базы данных
{
  char Causelove;
  cout << "Введите имя файла(с любовью): ";
  cin >> NameFile;
  file = fopen("db.db", "r");                   // Права на чтение файла
  if (file != NULL)
  {
        fclose(file);
        cout << "Файл успешно открыт (Когратюлэйнш)" << endl;
        system("pause");
 
  }
 
  return file;
 
}
Но выдаёт ошибки. Очень нуждаюсь в вашей помощи.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.04.2020, 18:45 10
Цитата Сообщение от XLAT Посмотреть сообщение
если я на вход подаю объект дисплея то вывод на дисплей,
если же объект файла, то вывод в файл.
Что тут может быть неясно?
"объект дисплея" - это твоя личная отсибятина.

std::cout - это не "объект дисплея".
он вообще может быть не связан с черно-белым окошком консоли,
а выводить в файлик, например.

и делает он это в соответствии с стандартными правилами.


ты же не ожидаешь от него, что в случае:
C++
1
std::cout << "ololo";
он обязан тут же вывести строчку к тебе на дисплей?

так с какой стати, ты считаешь что в этом случае обязан?
C++
1
std::cout << vec;
если он у тебя в одном случае ведет себя так,
а в другом этак, значит хреновый у тебя дизайн.
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
27.04.2020, 19:00 11
Цитата Сообщение от Evreii Посмотреть сообщение
C++
9
10
fclose(file);
cout << "Файл успешно открыт (Когратюлэйнш)" << endl;
вводите юзверя в заблуждение,
вот так уже нет:

C++
9
10
fclose(file);
cout << "Файл успешно открыт и ... ЗАКРЫТ (Когратюлэйнш)" << endl;


Evreii,
я бы посоветовал вам переписать этот код в ОПП стиле.

Цитата Сообщение от Evreii Посмотреть сообщение
C
32
File* file; // Переменная файла
глобальные переменные это жирный источник багов, часто трудноуловимых, если такого кода у вас много.

к file могут иметь доступ кто угодно из любого места программы.
А что если file уже был открыт где-то ещё?
и тд и тп...

Добавлено через 6 минут
Цитата Сообщение от hoggy Посмотреть сообщение
"объект дисплея" - это твоя личная отсибятина.
если ты ничего не понял, так и напиши что, мол, "я ничего не понял".
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.04.2020, 19:04 12
Цитата Сообщение от XLAT Посмотреть сообщение
если ты ничего не понял, так и напиши что, мол, "я ничего не понял".
я понял, что ты начал скатываццо в какую то хрень.
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
27.04.2020, 23:22 13
Цитата Сообщение от hoggy Посмотреть сообщение
я понял, что ты начал скатываццо в какую то хрень.
расскажи мне, что твоя отсебятина лучше


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
 
void func(std::ostream& cout)
{   cout << "test"<<std::endl;
}
 
std::ostream& DISPLAY = std::cout;
 
int main()
{   
    std::ofstream file("111.txt");
    
    ///-------------------------------------------|
    /// Вывод в файл.                             |
    ///-------------------------------------------:
    func(file);
    ///-------------------------------------------|
    /// Специально для троллей вывожу на  DISPLAY |
    ///-------------------------------------------:
    func(DISPLAY );
    
}
хз, что тебе не ясно ...

но, извини я не доктор

Добавлено через 2 часа 26 минут
Цитата Сообщение от Evreii Посмотреть сообщение
Но выдаёт ошибки
Цитата Сообщение от Evreii Посмотреть сообщение
File* file; // Переменная файла
хм,
нужно было сразу написать, что код у вас не рабочий?!

Цитата Сообщение от Evreii Посмотреть сообщение
Я думал чтобы упростить просто взять и открывать всё время один и тот же файл
вот демка, в которой упростить без удаления функционала не получится:

демка по теме:
Цитата Сообщение от XLAT Посмотреть сообщение
я бы посоветовал вам переписать этот код в ОПП стиле.
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
///----------------------------------------------------------------------------|
/// Демо структуры для работы с файлом.
///----------------------------------------------------------------------------:
#include <iostream>
#include <stdio.h>
using namespace std;
 
///----------------------------------------------------------------------------|
/// Конфиг дефолтный.
///----------------------------------------------------------------------------:
const char* NAMEFILE_DEFAULT = "db.db";
 
///----------------------------------------------------------------------------|
/// Структура данных для работы с файлом.
/// Сюда засовываем все переменные и методы которые работают с хэндлом файла.
///----------------------------------------------------------------------------:
struct  sFile
{       sFile(const char* name = NAMEFILE_DEFAULT) : file(NULL), buf(NULL)
    {   strcpy(Name, name);
        std::cout << Name << "\n";
        OpenFile();
    }
    ~sFile()
    {   if(file) fclose(file);
    }
 
    ///------------------------------------|
    /// Открываем файл на чтение.          |
    /// Если его нет, то инчего не создаём.|
    ///------------------------------------:
    void OpenFile()
    {   if ((file = fopen(Name, "r")) == NULL)
        {   std::cout << "ERROR!\n    ... press ENTER.\n\n";
            std::cin.get();
            return;
        }
        else
        {   getsize();
            cout << "Файл " << Name << " успешно открыт: size = "<< size <<"\n";
            read();
        }
    }
 
private:
    char* Name = new char[32];
    FILE* file;
    int   size;
    char*  buf;
 
    ///------------------------------------|
    /// Определяем размер файла.           |
    ///------------------------------------:
    void getsize()
    {   fseek(file, 0, SEEK_END);
        size = ftell(file);
        fseek(file, 0, SEEK_SET);
    }
    
    ///------------------------------------|
    /// Файл читаем сразу целиком.         |
    ///------------------------------------:
    void read()
    {   buf = new char[size+1];
        buf[size] = 0;
        fread (buf, sizeof(char), size, file);
    }
    
public:
    void info_bin()
    {   if(buf == NULL) return;
        std::cout << "Бинарный вывод:\n";
        int i = 0;
        for(char* b = buf; *b; b++)
        {   std::cout << int(*b);
        }
    }
};
 
///----------------------------------------------------------------------------|
/// Тест структуры(она же и класс) sFile.
///----------------------------------------------------------------------------:
int main()
{   setlocale(0, "");
 
    sFile file;             // имя по умолчанию.
    sFile file2("test.my"); // если на диске файла нет, то ошибка.
    
    ///------------------------------------|
    /// Смотрим то, что прочитали.         |
    ///------------------------------------:
    file.info_bin();
}
Добавлено через 8 минут
эта демка в деле тут:
Задание с раздела "Чтение строк и файлов в С++"
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 3
20.10.2022, 21:33 14
XLAT, а мне можно помочь? только я ничего пока не понимаю
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
20.10.2022, 21:39 15
Цитата Сообщение от Sekre Посмотреть сообщение
а мне можно помочь?
ты же бот
и я бот.

как бот может помочь боту?
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 3
20.10.2022, 22:05 16
Добавлено через 23 секунды
платно) как вариант
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,073
Записей в блоге: 3
20.10.2022, 22:07 17
Цитата Сообщение от Sekre Посмотреть сообщение
платно) как вариант
жди, щас тебе модер отпишет.
0
0 / 0 / 0
Регистрация: 10.10.2022
Сообщений: 3
20.10.2022, 22:11 18
вообще, я серьёзно.
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,591
21.10.2022, 01:39 19
Цитата Сообщение от hoggy Посмотреть сообщение
если уж докалебываццо, тогда до последнего '\n'
Девиз для код-ревью.
В рамочку на стеночку. )))

Добавлено через 2 часа 41 минуту
Цитата Сообщение от Sekre Посмотреть сообщение
а мне можно помочь?
Нам всем уже помочь нельзя.

Цитата Сообщение от Evreii Посмотреть сообщение
Но выдаёт ошибки. Очень нуждаюсь в вашей помощи.
Да, хорошая идея.
Ещё лучше разделить чтение имени файла и открытие файла по разным функциям.
И переходите на fstream. Для красоты, разумеется.

Пример:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <stdexcept>
 
struct Transport {
    //...
};
 
std::istream &operator>>(std::istream &in, Transport &transport) {
    // ввод из in в transport
    // in >> transport.mk
    // in >> transport.power;
    // ...
    return in;
}
 
// чтение имени файла
std::string readFileName() {
    std::string filename;
    std::cin >> filename;
    return filename;
}
 
// чтение из файла
std::vector<Transport> readFromFile(const std::string &filename) {
    std::ifstream database(filename);
    if (database) {
        std::vector<Transport> result;
        Transport transport;
        while (database >> transport) {
            result.push_back(transport);
        }
        return result;
    } else {
        throw std::runtime_error("error opening file '" + filename + "'");
    }
}
 
int main() {
 
    auto data = readFromFile(readFileName());
 
    return 0;
}
0
21.10.2022, 01:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2022, 01:39
Помогаю со студенческими работами здесь

Визуализация графов
В общем есть такой пакет http://ru.wikipedia.org/wiki/Graphviz С помощью него можно вводить граф...

Визуализация расчетов
Имеется рабочая программа на Си. В результате её работы получается текстовый файл, содержащий три...

Визуализация графика С++ OpenGL
Есть некоторые баги, придётся покопаться в коде, ибо я уже сдал и особого желания выискивать ошибки...

Визуализация алгоритмов сортировки
Нужно создать программу для визуализации 3 алгоритмов сортировки. Подскажите, как и на чем лучше...

Визуализация результатов моделирования
Добрый вечер! Собственно говоря, вот в чем дело: занимаюсь я моделированием различных физических...

Визуализация быстрой сортировки
Ребят,может кто помочь с визуальной сортировкой массива.. Нужна быстрая сортировка,но буду рад...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru