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

Undefined Behavior fstream

12.04.2021, 15:28. Показов 1248. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цель: написать программу которая записывает в текстовый файл информацию об объектах класса Car(поля класса - марка машины и количество подушек безопасности)(для хранения объектов класса Car я использовал обычный массив(к примеру на 3 элемента)). После этого, с файла, записанную информацию нужно считать, и с помощью введенного с клавиатуры названия марки машины найти эту машину в массиве, после чего вывести в консоль информацию о ней. Я ни в коем случае не прошу за меня дописывать программу, нет. Более чем достаточно будет указать в каком месте стоит посмотреть повнимательнее.
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
 
class Car
{
    string _nameOfCarCompany;
    int _airbagsNumber;
 
public:
 
    Car(){};
    Car(string name, int number): _nameOfCarCompany(name), _airbagsNumber(number){}
 
    string getNameOfCarCompany()
    {
        return _nameOfCarCompany;
    }
 
    int getAirbagsNumber()
    {
        return _airbagsNumber;
    }
 
    void setNameOfCarCompany(string name)
    {
        _nameOfCarCompany = name;
    }
 
    void setAirbagsNumber(int number)
    {
        _airbagsNumber = number;
    }
 
};
 
int main()
{
    Car *cars[3];
    int i;
    string name = "";
    int number;
    for(i = 0; i < 3; ++i)
    {
        cout << "Enter the name of car company: ";
        cin >> name;
        cout << "Enter the number of airbags: ";
        cin >> number;
        cars[i] = new Car(name, number);
    }
    fstream fs;
    string buf = "";
    int numBuf;
    fs.open("cars.txt", fstream::out | fstream::in | fstream::app);
    if(fs.is_open())
    {
        i = 0;
        while(!fs.eof())
        {
            buf = cars[i]->getNameOfCarCompany();
            fs << buf << "\n";
            numBuf = cars[i]->getAirbagsNumber();
            fs << numBuf << "\n";
            i++;
        }
    }
    else
        cout << "File haven't been opened:(" << endl;
    fs.close();
    string carToFind = "";
    cout << "Enter the name of car company you want to find: ";
    cin >> carToFind;
    fs.open("cars.txt", fstream::in | fstream::out | fstream::app);
    if(fs.is_open())
    {
        i = 0;
        while(!fs.eof())
        {
            buf = "";
            numBuf = 0;
            fs >> buf;
            cars[i]->setNameOfCarCompany(buf);
            fs >> numBuf;
            cars[i]->setAirbagsNumber(numBuf);
            i++;
        }
    }
    else
        cout << "File haven't been opened:(" << endl;
    fs.close();
    for(i = 0; i < 3; ++i)
    {
        if(cars[i]->getNameOfCarCompany() == carToFind)
        {
            cout << "Car you was looking for: " << endl;
            cout << "Name of car company: " << cars[i]->getNameOfCarCompany() << endl;
            cout << "Number of airbags: " << cars[i]->getAirbagsNumber() << endl;
        }
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2021, 15:28
Ответы с готовыми решениями:

Bug компилятора с++ Visual Studio 2015? Или undefined behavior ?
Всем привет! Наткнулась на одну любопытную штуку. Оказывается typedef можно объявлять...

undefined behavior
Здравствуйте! Сдаю задачу через проверующую систему вуза, там стоит компилятор Visual Studio...

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

var = UINT_MAX; var++; // undefined behavior?
Здравствуйте! В стандарте языка Си сказано: То есть здесь unsigned var = UINT_MAX; var++; ...

3
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,358
12.04.2021, 17:19 2
UB_MASTER, с целью понятно, окай.

А вопрос в чём?

Добавлено через 16 секунд
Цитата Сообщение от UB_MASTER Посмотреть сообщение
int _airbagsNumber;
неинициализированное поле

Цитата Сообщение от UB_MASTER Посмотреть сообщение
while(!fs.eof())
проверка флага до чтения - не нужнА

Добавлено через 1 минуту
а вот после чтения неплохо бы её сделать
1
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,078
12.04.2021, 19:01 3
Лучший ответ Сообщение было отмечено UB_MASTER как решение

Решение

Цитата Сообщение от UB_MASTER Посмотреть сообщение
(для хранения объектов класса Car я использовал обычный массив(к примеру на 3 элемента))
Но у вас в программе нет массива, которых хранит объекты типа Car. Вместо этого вы почему-то сделали массив, который хранит указатели на объекты типа Car. Почему вы сделали массив указателей, если вы хотели хранить сами объекты?

Цитата Сообщение от UB_MASTER Посмотреть сообщение
C++
1
fs.open("cars.txt", fstream::out | fstream::in | fstream::app);
Зачем вы указали флаг in при открытии файла, который вы собираетесь только записывать?

Цитата Сообщение от UB_MASTER Посмотреть сообщение
C++
1
2
3
4
        while(!fs.eof())
        {
            buf = cars[i]->getNameOfCarCompany();
            fs << buf << "\n";
Зачем вы приделали проверку на !eof при записи файла? Что проверяет эта проверка?

Цитата Сообщение от UB_MASTER Посмотреть сообщение
C++
1
fs.open("cars.txt", fstream::in | fstream::out | fstream::app);
Почему вы указали флаги out и app при открытии файла, который вы собираетесь только читать?

Цитата Сообщение от UB_MASTER Посмотреть сообщение
C++
1
2
        while(!fs.eof())
        {
Цикл с предусловием !eof при чтении файла - всегда ошибка.
1
0 / 0 / 0
Регистрация: 12.04.2021
Сообщений: 2
12.04.2021, 20:08  [ТС] 4
Спасибо, всё исправил - заработало)
0
12.04.2021, 20:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2021, 20:08
Помогаю со студенческими работами здесь

Разьясните Behavior
Почитал https://msdn.microsoft.com/ru-ru/library/system.windows.dependencyproperty(v=vs.110).aspx...

TreeView Behavior Click
Всем доброго дня. Сразу напишу данную реализацию нашел здесь на форуме. Реализация skilllab. Она...

Control Link - Window Behavior
Доброе всем утро. :huh: Возник такой вопрос: У контрола Link есть такой параметр - Window...

Behavior скрытие курсора мыши
есть необходимость, когда окно находится в развернутом состоянии, при &quot;простое&quot; крусора мыши...

Yii. Nested Set Behavior и attachBehavior
В общем как-то наткнулся на это https://github.com/yiiext/nested-set-behavior/issues/32 Увидел, что...

Вирус Behavior:Win32/Powemet.B!attk
Добрый день. Помогите, пожалуйста, решить проблему. Антивирусник находит вирус...


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

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