Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
1

Открывается текстовый файл но не записывается

22.03.2018, 01:13. Просмотров 346. Ответов 25

Использую опенжл, параллельно, по нажатию кнопки, надо создавать разные текстовые файлы и записывать в них информацию, но по нажатию кнопки файл создается и закрывается пустой. При том если выносить создание и запись в мейн, что естественно меня не устраивает, файл создается и записывается корректно.
MAIN:
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
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
#include <GL/glut.h>
#include <iostream>
#include <time.h>
#include "windows.h"
#include<fstream>
#include"button.h"
 
using namespace std;
 
int w = 640; //Задание ширины окна
int h = 480; //Задание высоты окна
bool picture[400][400]; //Массив для ввода
bool checkPicture [10][10]; //Преобразованный массив для ввода
string title = " "; //Шапка программы
 
 
//Стандартные функции рисования
/*  glRectf(x,y,x1,y1);
    glColor3f(r,g,b)
    glBegin(GL_LINES);
    glVertex2f(x,y)
*/
 
button Education;button Clear;button Record;
 
void clearMass()
{
    int i;
    int k;
    for(i = 0; i <400;i++)
    {
        for(k = 0; k<400;k++)
        {
            picture[i][k]=false;
        }
    }
    for(i = 0; i <10;i++)
    {
        for(k = 0; k<10;k++)
        {
            checkPicture[i][k]=false;
        }
    }
}
 
 
int booltoint(bool a)
{
    int retur;
    if (a==false) retur = 0;
    else retur = 1;
    return retur;
}
 
string inttohex(int a)
{
    string tmp("");
    do
    {
        int r(a%16);
        if (r>9) {r+=(int)'A'-10;}
        else  {r+=(int)'0';};
        tmp=(char)r+tmp;
        a/=16;
    } while (a);
    return tmp;
}
 
string inttostr(int a)
{
    char numb[11] = "0123456789";
    int counter = 1;
    int field[9];
    char retur[10] = "         ";
    for(int i = 0; i <9; i++)
    {
        if((a/10)>0)
        {
            field[i] = a;
            a = a/10;
            counter +=1;
        }
        else  {field[i] = a%10; break;}
    }
    int j ;
    j = field[counter - 1];
    retur[0] = numb[j];
    for(int k =1; k < counter;k++)
    {
    j = field[counter-(k+1)] - field[counter-k]*10;
    retur[k] = numb[j];
    }
    return retur;
}
 
void recordMass(int symbol)
{
    //string adress =("C:\\Users\\kvos\\Desktop\\C++\\neironet1\\data\\"+inttohex(symbol)+".txt");
    string adress =  (inttostr(123)+".txt");
    ofstream file(adress.c_str(), ios::binary);
    string kek = inttostr(1);
    glutSetWindowTitle((inttostr(321).c_str()));
    Sleep(500);
    for(int i = 0; i < 10; i++)
    {
        for(int k = 0; k< 10; k++)
        {
            //mass << (inttostr(booltoint(checkPicture[i][k])));
            file << kek;
            //glutSetWindowTitle((inttostr(booltoint(checkPicture[i][k]))).c_str());
            //Sleep(50);
        }
    }
    file.close();
    glutSetWindowTitle((inttostr(123).c_str()));
}
 
 
 
void MousePressed(int button, int state, int x, int y)
{
    Education.check(x,y);
    Clear.check(x,y);
    if(((x>=Clear.returnX())&&(x<=Clear.returnX1()))&&((y>=Clear.returnY())&&(y<=Clear.returnY1())))
    {
        clearMass();
        Clear.check(x,y);
    }
    Record.check(x,y);
    if(((x>=Record.returnX())&&(x<=Record.returnX1()))&&((y>=Record.returnY())&&(y<=Record.returnY1())))
    {
        recordMass('#');
        Record.check(x,y);
    }
}
 
void input(int x , int y)
{
    picture[x][y] = true;
    for(int i = 0; i < 10; i++)
    {
        for(int k = 0; k < 10; k++)
        {
            for(int j = i*40; j < 40 * (i+1); j++)
            {
                for(int l = k*40; l < 40*(k+1); l++)
                {
                    if(picture[j][l]==true)checkPicture[i][k] = true;
                }
            }
        }
    }
 
}
 
 
void drawPicture()
{
    for(int i = 0; i < 400;i++)
    {
        for(int k = 0; k < 400; k++)
        {
            if(picture[i][k]==true)
            {
                //title = title + inttostr(i) + inttostr(k);
                glColor3f(1.0,0.0,0.0);
                glBegin(GL_POINTS);
                glVertex2f(i,480 -k);
                glEnd();
        }}
    }
    for(int q = 0; q < 10;q++)
    {
        for(int e = 0; e < 10; e++)
        {
            if(checkPicture[q][e]==true)
            {
                glColor3f(0.0,0.0,0.0);
                //glBegin(GL_POINTS);
                int x = (450 + 10 * (q+1));
                int y =( h- (80 + 10*(e+1)));
                glRectf(x,y,x+20,y+20);
                //glEnd();
        }}
    }
}
 
void MousePressedMove(int ax, int ay)
{
    if((ax<400)&(ay<400))input(ax,ay);
   //title = inttostr(ax) + inttostr(ay);
}
 
void markup()
{
    glColor3f(0.0,1.0,0.0);
    glBegin(GL_LINES);
    glVertex2f(400,h);glVertex2f(400,0);
    glVertex2f(0,h-400);glVertex2f(400,h-400);
    glVertex2f(400,240);glVertex2f(w,240);
    glEnd();
}
 
 
 
void display() //Функция отрисовки экрана
{
    glClear(GL_COLOR_BUFFER_BIT); //Очистка экрана
    glClearColor(1.0,1.0,1.0,1.0);
    //int a = '#';
    markup();
    Education.draw();
    Clear.draw();
    Record.draw();
    drawPicture();
    //title = " ";
    glFlush(); //Вывод на экран
}
 
void timer(int = 0) //Функция таймера
{
 
    display(); //Вызов отрисовка экрана
    glutTimerFunc(10,timer,0);
}
 
 
 
int main(int argc, char **argv) //Главная функция
{
    for(int i = 0; i < 400;i++)
    {
        for(int k = 0; k < 400; k++)
            picture[i][k] = false;
    }
    for(int i = 0; i < 400;i++)
    {
        for(int k = 0; k < 400; k++)
        {
            checkPicture[i][k] = false;
        }
    }
    Education.newButton(10,410,70,470);
    Clear.newButton(80,410,140,470);
    Record.newButton(150,410,210,470);
    { //СИСТЕМНЫЕ ФУНКЦИИ
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(w, h);
    glutCreateWindow("Neironet");
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, w, 0, h);
    glutDisplayFunc(display);
    glClearColor(1.0,1.0,1.0,1.0);
    glutMotionFunc(MousePressedMove);
    glutMouseFunc(MousePressed);
    glutTimerFunc(10,timer,0);
    glutMainLoop();
    }
}
class button:
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
#include "button.h"
#include <GL/glut.h>
 
using namespace std;
 
void button::newButton(int xd,int yd,int x1d,int y1d)
        {
            x = xd;
            y = yd;
            x1 = x1d;
            y1 = y1d;
            status = false;
            change = false;
        }
void button::draw()
        {
            if (status == false) glColor3f(0.0,1.0,0.0);
            else glColor3f(1.0,0.0,0.0);
            glRectf(x,480-y,x1,480-y1);
        }
        void button::check(int xd, int yd)
        {
            if(((xd>=x)&&(xd<=x1))&&((yd>=y)&&(yd<=y1)))
            {
                if(change == false)
                {
                if(status==false)status=true;
                else status = false;
                change = true;
                }
                else change = false;
            }
 
        }
        bool button::returnStatus()
        {
            return status;
        }
        int button::returnX()
        {
            return x;
        }
        int button::returnY()
        {
            return y;
        }
        int button::returnX1()
        {
            return x1;
        }
        int button::returnY1()
        {
            return y1;
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2018, 01:13
Ответы с готовыми решениями:

Не открывается текстовый файл для чтения (использовал fstream.h)
#include &lt;fstream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt;...

Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый файл
Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке...

Текстовый файл UTF-8 сохранить как текстовый файл ANSI
Есть текстовый файл в UTF-8 Нужно рядом сохранить его же, но в ANSI Как...

Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла
Дано число k (&lt; 10) и текстовый файл, содержащий более k строк. Создать новый...

Не записывается бинарный файл:(
Здравствуйте. Программа читает четыре числа типа double в текстовом файле и...

25
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 01:33 2
Цитата Сообщение от SergeyZabolotni Посмотреть сообщение
но по нажатию кнопки файл создается и закрывается пустой.
Точку останова поставь и посмотри: доходит ли код до записи в файл.
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 01:34  [ТС] 3
Заголовок менял, доходит
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 01:35 4
Цитата Сообщение от SergeyZabolotni Посмотреть сообщение
Заголовок менял, доходит
Переведи, о чём это?
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 01:37  [ТС] 5
Ставил функцию изменения заголовка программы с задержкой и при создании, и при записи, и при закрытии - везде проходит
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 01:39 6
Цитата Сообщение от SergeyZabolotni Посмотреть сообщение
Ставил функцию изменения заголовка программы с задержкой и при создании, и при записи, и при закрытии - везде проходит
Я не пойму, о чём ты говоришь. Вот это сделай:
Цитата Сообщение от nd2 Посмотреть сообщение
Точку останова поставь и посмотри: доходит ли код до записи в файл.
Точку останова в recordMass(). Отладчиком, надеюсь, умеешь пользоваться?
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 01:48  [ТС] 7
Доходит
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 01:52 8
Цитата Сообщение от SergeyZabolotni Посмотреть сообщение
Доходит
Вот до этой строки?
C++
1
file << kek;
Какое там значение kek?
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 02:03  [ТС] 9
"1"
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 02:05 10
В каком месте создаётся пустой файл?
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 02:06  [ТС] 11
В корневой папке проекта
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 02:18 12
И по времени создания ты видишь, что это тот файл, который создаётся при нажатии на кнопку?

Добавлено через 8 минут
"button.h" покажи.
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 02:19  [ТС] 13
Да,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class button
{
private:
        int x,y,x1,y1;
        bool status, change;
public:
        void newButton(int xd,int yd,int x1d,int y1d);
        void draw();
        void check(int xd, int yd);
        bool returnStatus();
        int returnX();
        int returnY();
        int returnX1();
        int returnY1();
};
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 02:55 14
У меня, твой код, работает. Запись в файл происходит. Это всё, что я могу тебе сказать.

Добавлено через 25 минут
Среда какая?
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 12:15  [ТС] 15
Codeblocks mingw
0
likehood
965 / 814 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
22.03.2018, 12:49 16
Ещё неплохо бы добавить проверку успешности открытия файла. И путь можно временно прописать полный, чтобы быть уверенным, куда этот файл сохранится. И записать в него какую-нибудь простую строку, например "Hello world" - чисто для проверки.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 15:35 17
Цитата Сообщение от likehood Посмотреть сообщение
Ещё неплохо бы добавить проверку успешности открытия файла. И путь можно временно прописать полный, чтобы быть уверенным, куда этот файл сохранится. И записать в него какую-нибудь простую строку, например "Hello world" - чисто для проверки.
Ну и, перед циклами записи, проверь (выведи куда-нибудь) состояние потока: file.good();
И добавь (чтобы так было):
C++
1
2
file << kek;
file.flush();
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 16:09  [ТС] 18
file.good() до записи выдает 1 а после 0
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.03.2018, 16:53 19
Цитата Сообщение от SergeyZabolotni Посмотреть сообщение
а после 0
После - это где?
0
SergeyZabolotni
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 13
22.03.2018, 20:09  [ТС] 20
здесь 1
C++
1
2
3
4
5
string adress =  (inttostr(123)+".txt");
    ofstream file(adress.c_str(), ios::binary);
    string kek = inttostr(1);
    glutSetWindowTitle(inttostr(booltoint(file.good())).c_str());
    Sleep(1000);
здесь 0
C++
1
2
3
4
5
    }
    glutSetWindowTitle(inttostr(booltoint(file.good())).c_str());
    file.close();
 
}
0
22.03.2018, 20:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2018, 20:09

Не записывается в файл строка
Не могу понять, в чем проблема? Чтение из файла проходит успешно, а вот запись...

Записывается мусор в файл
Здравствуйте, есть следующий код для вывода дефолтных значений в файл: ...

Результат не записывается в файл
#include &quot;studide.h&quot; int main() { ofstream fout(&quot;cpp.txt&quot;);...


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

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

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