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

Fread и fout?

07.03.2017, 20:28. Показов 1599. Ответов 3

Author24 — интернет-сервис помощи студентам
Здравствуйте. Была поставлена предо мной задача: Сделать структуру, которая через меню будет выполнять некоторые действия с файлами. Сделать надо было через FILE*. Начитавшись в интернете увидел массу информации о ifstream как более современной замене. Вопрос в том: Как с минимальными изменениями изменить код данной программы под потоки ifstream? Пока что меня сбила функция fread и fout. Если не сложно, напишите правильно функцию read и write правильно, или какую-то другую замену, на ваш взгляд, я пытался, прорывов нет.

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <conio.h>
#include <string.h>
#include <Windows.h>
#include <fstream>
using namespace std;
 
struct sklad
{
    char name[100];
    char type[100];
    size_t quantity;
    double cost;
    void print()
    {
        cout<< "Назва : " << this->name<<endl;
        cout<< "Тип: " << this->type<<endl;
        cout<< "Количество: "<< this->quantity<<endl;
        cout<< "Стоимость: "<< this->cost<<endl;
    }
};
FILE*fp;
void opisanie();
void allinf();
void typeinf();
int menu()
{
    system("cls");
    cout << "\t\tВыберите действие:" << endl;
    cout << "\t0-Выход" << endl;
    cout << "\t1-Новый продукт" << endl;
    cout << "\t2-Вывести информацию о всех продуктах" << endl;
    cout << "\t3-Вывести информацию о конкретном продукте" << endl;
    cout << "\n\n\t\tВаше действие?- ";
    int answer;
    cin >> answer;
    cout << endl;
    return answer;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int answer;
    do
    {
        answer = menu();
        switch (answer)
        {
        case 0: return 0;
        case 1:
            opisanie();
            break;
        case 2:
            allinf();
            break;
        case 3:
            typeinf();
            break;
        default: cout << "Неверный ввод!" << "\n\n";
            cin.get(); cin.get();
        }
    } while (answer != 0);
    system("pause");
    return 0;
}
void allinf()
{
    sklad rout;
    fp = fopen("inform.txt", "r");
    while (true)
    {
        fread(&rout, sizeof(sklad), 1, fp);
        if (feof(fp)) break;
        cout << rout.name << " " << rout.quantity << " " << rout.type << " " << rout.cost << endl;
    }
    fclose(fp);
    cin.get(); cin.get();
}
void typeinf()
{
    sklad rout;
    char nx[100];
    cout<<"Введите наименование искомого продукта:  ";
    cin >> nx;
    fp = fopen("inform.txt", "r");
    bool flag = false;
    while (true)
    {
        fread(&rout, sizeof(sklad), 1, fp);
        if (feof(fp)) { break; }
        if (strcmp(rout.name, nx)==0) { flag = true;
        cout << rout.name <<" ";
        cout << rout.quantity << " ";
        cout << rout.type << " ";
        cout<< "Цена:";
        cout<<rout.cost <<endl;
        cout <<"Общая цена:"<< rout.quantity*rout.cost << endl;
        }
        
    }
    if (!flag) 
    cout << "Такой продукт отсутствует!" << endl;
    cin.get(); cin.get();
}
void opisanie()
{
        sklad rout;
        fp = fopen("inform.txt", "a");
        if (fopen == NULL) cout << "Файл не может быть открыт!";
 
        cout << "\nВведите имя продукта: ";
        cin >> rout.name;
 
        cout << "\nВведите единицу измерения продукта: ";
        cin >> rout.type;
 
        cout << "\nВведите количество продукта: ";
        cin >> rout.quantity;
 
        cout << "\nВведите стоимость единицы продукта: ";
        cin >> rout.cost;
 
        fwrite(&rout, sizeof(sklad), 1, fp);
        fclose(fp);
    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2017, 20:28
Ответы с готовыми решениями:

Ошибка Warning: fread() [function.fread]: Length parameter must be greater than 0
Есть строка кода if(!preg_match('/'.$user.&quot;/&quot;,fread($fusers,filesize(&quot;user/users.txt&quot;))) &amp;&amp;...

Отсортировать N-ую строку файла fin.txt по возрастанию длин слов в строке и записать ее в fout.txt
не могу понять c++ , поможет кто разобраться? на паскале всё получается, а сейчас решил C++ изучить...

Undefical symbol "fout"
Доброе утро!!!! Помогите, пожалуйста, с проблемой. Попробывал написать программку, копирующую...

fread
Подскажите пожалуйста, как можно записать в структура данные из файла используя fread, просто все...

3
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
07.03.2017, 21:48 2
Цитата Сообщение от kravcevv Посмотреть сообщение
я пытался, прорывов нет
Что, собственно, не получилось?
http://www.cplusplus.com/refer... /ifstream/
http://www.cplusplus.com/refer... ream/read/
http://www.cplusplus.com/refer... /ofstream/
http://www.cplusplus.com/refer... eam/write/
1
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 22
07.03.2017, 22:13  [ТС] 3
Посмотрите, правильно ли, и если можете, укажите на ошибку в функции typeinf, она никак не хочет запускаться.

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <conio.h>
#include <string.h>
#include <Windows.h>
#include <fstream>
#include<algorithm>
using namespace std;
 
struct sklad
{
    char name[100];
    char type[100];
    size_t quantity;
    double cost;
    void print()
    {
        cout<< "Название : " << this->name<<endl;
        cout<< "Тип: " << this->type<<endl;
        cout<< "Количество: "<< this->quantity<<endl;
        cout<< "Стоимость: "<< this->cost<<endl;
    }
};
ofstream stream("inform.txt");
void opisanie();
void allinf();
void typeinf();
int menu()
{
    system("cls");
    cout << "\t\tВыберите действие:" << endl;
    cout << "\t0-Выход" << endl;
    cout << "\t1-Новый продукт" << endl;
    cout << "\t2-Вывести информацию о всех продуктах" << endl;
    cout << "\t3-Вывести информацию о конкретном продукте" << endl;
    cout << "\n\n\t\tВаше действие?- ";
    int answer;
    cin >> answer;
    cout << endl;
    return answer;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int answer;
    do
    {
        answer = menu();
        switch (answer)
        {
        case 0: return 0;
        case 1:
            opisanie();
            break;
        case 2:
            allinf();
            break;
        case 3:
            typeinf();
            break;
        default: cout << "Неверный ввод!" << "\n\n";
            cin.get(); cin.get();
        }
    } while (answer != 0);
    system("pause");
    return 0;
}
void allinf()
{
    sklad rout;
    ifstream input("inform.txt", ios_base::in);
    if (!input) cout << "ERROR!";
    while (true)
    {
 
        input.read((char*)&rout, sizeof(sklad));
        if (input.eof()) break;
        rout.print();
        cout << endl;
    }
    input.close();
    cin.get(); cin.get();
}
void typeinf()
{
    sklad rout;
    char nx[100];
    cout<<"Введите наименование искомого продукта:  ";
    cin >> nx;
    bool flag = false;
    ifstream input("inform.txt");
    if (!input) cout << "ERROR!";
    while (true)
    {
        input.read((char*)&rout, sizeof(sklad));        
        if (rout.name == nx)
        {
            rout.print();
            cout << "Общая цена:" << rout.quantity*rout.cost << endl;          flag = true;
            break;
        }
    }
    if (!flag)
    {
        cout << "ERROR!" << endl;
    }
}   
 
void opisanie()
{
        sklad rout;
        ofstream output("inform.txt", ios::app);
 
        if (!output) cout << "ERROR";
 
        cout << "\nВведите имя продукта: ";
        cin >> rout.name;
 
        cout << "\nВведите единицу измерения продукта: ";
        cin >> rout.type;
 
        cout << "\nВведите количество продукта: ";
        cin >> rout.quantity;
 
        cout << "\nВведите стоимость единицы продукта: ";
        cin >> rout.cost;
        output.write((char*)&rout, sizeof(sklad));
        cout << endl;
        output.close();
}
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
07.03.2017, 22:24 4
Цитата Сообщение от kravcevv Посмотреть сообщение
C++
1
if (rout.name == nx)
Так std::string можно сравнивать. Для Си-строк:
C++
1
if (strcmp(rout.name, nx) == 0)
1
07.03.2017, 22:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2017, 22:24
Помогаю со студенческими работами здесь

Не работает fread()
Почему такой странный вывод?

Вывод с Fread
Не выводит с помощью Fread, сейчас его нету, использвал fgets, но мне именно нужно fread, помогите...

fseek / fread
Всем привет! Такой вопрос возник. Есть строка, состоящая из нескольких &quot;записей&quot; в файле (буквы...

Непонятки с fread
Добрый день. Столкнулся с такой проблемой: читаю обычный текстовый файл, однако помимо его...


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

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