Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 26.07.2015
Сообщений: 5
1

Передача файла в функцию в качестве параметра

20.12.2015, 20:44. Просмотров 1591. Ответов 4
Метки нет (Все метки)


Имеется такой код, который, по идее, должен создавать файл с записями и кое-как их потом преобразовывать. Проблема в том, что файл не создаётся и, собственное, ничего не записывается. Подскажите, где накосячил. З.Ы. прога далека от завершения, есть много лишнего.
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
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <fstream>
 
int col=-1;
 
struct employee
{
    char name[20];
    float salary;
    int stage;
};
 
using namespace std;
 
void write(fstream &file, int& col)
{
    employee *mas;
    cout << "Сколько сделать записей?\n N=";
    do{
    cin >> col;
    if (col<0) cout << "Введите число больше 0";
    }while(col<0);
    mas = new employee[col];
    for(int i = 0; i<col; i++){
        cout << "Работник " << i+1 << ". \n";
        cout << "Имя: "; cin >> mas[i].name;
        cout << "Зарплата: "; cin >> mas[i].salary;
        cout << "Стаж: "; cin >> mas[i].stage;
    }
    file.open("orig.dat");
        if(file.is_open())
    {
        cout<<"yes";
    }else cout <<"no";
    for(int i = 0; i<col; i++){
        file << mas[i].name; file << "\n";
        file << mas[i].salary; file << "\n";
        file << mas[i].stage; file << "\n";
    }
    file.close();
}
 
void read(fstream &file, int col)
{
    if (col == -1){
        cout << "Файл не создан";
    }else{
    employee e;
    file.open("orig.dat");
    do{
        file >> e.name;
        file >> e.salary;
        file >> e.stage;
        if(file.eof()) break;
        cout << e.name << " " << e.salary << "грн " << e.stage << "лет\n";
        }while(!file.eof());
    file.close();
    }
}
 
void sortF(fstream &orig, fstream &temp, int col)
{
    if (col == -1){
        cout << "Файл ещё не создан.";
    }else{
    employee *mas;
    employee e;
    int n;
    mas = new employee[col];
    orig.open("orig.dat");
    do{
        orig >> e.name;
        orig >> e.salary;
        orig >> e.stage;
        if(orig.eof()) break;
        mas[n] = e;
        n++;
        }while(!orig.eof());
    orig.close();
        employee t;
    for(int i = 0; i<n; i++){
        for(int j = i+1; j<n; j++){
            if(strcmp(mas[i].name, mas[j].name)>0){
                t = mas[i];
                mas[i] = mas[j];
                mas[j] = t;
            }
        }
    }
    temp .open("temp.dat");
    for(int i = 0; i<col; i++){
        temp << mas[i].name; temp << "\n";
        temp << mas[i].salary; temp << "\n";
        temp << mas[i].stage; temp << "\n";
    }
    temp.close();
    remove("orig.dat");
    rename("orig.dat", "temp.dat");
    }
}
 
void seek(fstream &file, int col)
{
    if (col == -1){
        cout << "Файл не создан.";
    }else{
    employee e;
    cout << "Сотрудники со стажем больше 10 лет и заработной платой больше 15000. \n";
    file.open("orig.dat");
    do{
        file >> e.name;
        file >> e.salary;
        file >> e.stage;
        if(file.eof()) break;
        if (e.salary > 15000 && e.stage > 10)
            cout << e.name << " " << e.salary << "грн " << e.stage << "лет\n";
        }while(!file.eof());
    file.close();
    }
}
 
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    fstream orig ("orig.dat", ios::in | ios::out);
    fstream temp ("temp.dat", ios::in | ios::out);
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int choose;
    do
    {
        cout << "1. Создать файл со списком\n";
        cout << "2. Вывести файл на экран.\n";
        cout << "3. Осортировать файл по алфавиту.\n";
        cout << "4. Показать сотрудников со стажем больше 10 лет и заработной платой больше 15000.\n";
        cout << "5. Выход с программы.\n";
        cout <<  "Выберите действие:";
        cin >> choose;
        switch(choose)
        {
        case 1:
            system("cls");
            write(orig, col);
            break;
        case 2:
            system("cls");
            read(orig, col);
            break;
        case 3:
            sortF(orig, temp, col);
            break;
        case 4:
            system("cls");
            seek(orig, col);
            break;
        case 5: cout << "Выход";
        default:
            cout << "Неверное действие.";
            system("cls");
        }
    }
    while (choose != 5);
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2015, 20:44
Ответы с готовыми решениями:

Передача файла в функцию в качестве параметра
Здравствуйте! Подскажите, как передать файловый поток в функцию? int main() { ifstream...

Передача массива в функцию в качестве параметра
Всем привет! Файл с реализацией: int Init_can::Send(int* msgdata) { //Send canmsg_t tx;...

Передача функции в качестве параметра в другую функцию
Задание стоит следующее: Написать программу, содержащую две функции. Первая функция, вычисляющая...

Передача двумерного динамического массива в функцию в качестве параметра
Вообщем надо сложить и умножить две матрицы, но сделать это в отдельных функциях. Матрицы заданы...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
4
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
20.12.2015, 20:48 2
Цитата Сообщение от Harbingerr Посмотреть сообщение
fstream &file
Вот это прям дурость!
Передавай const char с путем до файла и уже в методе открывай поток и работай с ним!
1
0 / 0 / 0
Регистрация: 26.07.2015
Сообщений: 5
20.12.2015, 20:52  [ТС] 3
в С++ я пока соображаю туго, поэтому не совсем понял...
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
20.12.2015, 20:57 4
Лучший ответ Сообщение было отмечено Harbingerr как решение

Решение

Harbingerr, Смотри, ты открыл поток в самом начале main и с ним работаешь, это мягко говоря не правильно. Ладно поток на чтения и среда линь или юникс это пол беды, а если вин то ты блокируешь файл! а в винде все файл занят и без вариантов. Ладно по порядку в виде алгоритма:
1е отрисовали меню
2е с помошью кейса вызываем метод, с параметрами типо
C++
1
2
3
4
5
6
void read(const char FileName, int col)
{
fstream file (FileName, ios::in | ios::out);
//ну и так далее
file.close();
}
потом опять меню, или что у тебя там идет
1
0 / 0 / 0
Регистрация: 26.07.2015
Сообщений: 5
20.12.2015, 21:00  [ТС] 5
спасибо, вроде дошло, сейчас буду переделывать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2015, 21:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Передача файла в качестве параметра
Как, в качестве параметра, передать функции файл и структуру??? Добавлено через 1 час 1 минуту...

Передача функции в качестве параметра
Как передать функцию с параметрами в transform? Т.е., например, мне надо из каждого числа вектора...

Передача функции в качестве параметра
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; double f(double x) { return...

Функции, передача массива в качестве параметра
Приветствую) Собственно, есть простенькое задание с двумерными массивами, оно выполнено: ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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