Форум программистов, компьютерный форум CyberForum.ru

Довольно странный и смешной глюк. (и очень непонятный.) - C++

Восстановить пароль Регистрация
 
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
06.05.2012, 21:42     Довольно странный и смешной глюк. (и очень непонятный.) #1
Появился странный глюк. В точке 1 ввожу текст в структуру при помощи обычного cin. В точке 2 видно, что значение принято. В точке 3, значение до сих пор присутствует. Но, вдруг в точке 4 все пропадает!!! Как??? Више (5) видно этот момент в коде, абсолютно ничего нового я не делаю!?!?!?
Довольно странный и смешной глюк. (и очень непонятный.)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2012, 21:42     Довольно странный и смешной глюк. (и очень непонятный.)
Посмотрите здесь:

C++ Довольно странно.
C++ странный "глюк"
Странный глюк с вектором C++
Странный глюк с биндом C++
Непонятный глюк при дебаге C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
06.05.2012, 21:46     Довольно странный и смешной глюк. (и очень непонятный.) #2
Киньте, пожалуйста, весь код. Так будет гораздо проще разобраться.
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
06.05.2012, 21:56  [ТС]     Довольно странный и смешной глюк. (и очень непонятный.) #3
Весь код кидать смысла нету. Проблема возникает именно в этом месте.
Скину фрагменты:
Создание структур:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct form 
{
    char name[15];
    int birth;
    char nation[3];
    char faculty[7];
    int speciality;
    char formstudy[7];
    int code;
    int graduated;
    char sex;
 
} base[1000], tmp;
При начале работы меняю шрифт на тот что поддерживает укр и увеличиваю буфер чтоб таблицы поместились:
C++
1
2
3
4
5
6
SetConsoleCP (1251);
SetConsoleOutputCP (1251);
 
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); 
COORD size = {800,800};  // символов 
SetConsoleScreenBufferSize(hCon,size);
вот код добавления нового елемента:
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
  int i;
   form* p = &tmp;
 
     cout<<"Введіть ПІБ абітурєнта: ";
     char_input(15, &tmp.name[0]);//char
     cout<<"Введіть дату народження абітурєнта: ";
     int_input(3000, tmp.birth);
     cout<<"Введіть стать абітурєнта: ";
     sex_input(&tmp.sex);//char
     cout<<"Введіть рік закінчення абітурєнтом школи: ";
     int_input(3000, tmp.graduated);
     cout<<"Введіть ідентифікаційний код абітурєнта: ";
     code_input(tmp.code);
     cout<<"Введіть факультет на який планує поступити абітурєнт: ";
     cin>>tmp.faculty;//char_input(7, &tmp.faculty[0]);//char
     cout<<"1-"<<tmp.faculty;
     cout<<"Введіть спеціальність на яку планує поступити абітурєнт: ";
     int_input(9999, tmp.speciality);
     cout<<"Введіть форму навчання на яку планує поступити абітурєнт: ";/////////////////////
     char_input(7, &tmp.formstudy[0]);//char
     cout<<"1.1-"<<tmp.faculty;
     cout<<"Введіть національність абітурєнта: ";
     char_input(3, &tmp.nation[0]);//char
     //////////////////////////////////////
     cout<<"2-"<<tmp.faculty;
     i=-1;
     do i++;
     while(base[i].birth != 0);
     base[i] = tmp;
     cout<<"3-"<<tmp.faculty;
     cout<<"4-"<<base[i].faculty;
     /*base[i].faculty[0] = tmp.faculty[0];
     base[i].faculty[1] = tmp.faculty[1];
     base[i].faculty[2] = tmp.faculty[2];
     base[i].faculty[3] = tmp.faculty[3];
     base[i].faculty[4] = tmp.faculty[4];
     base[i].faculty[5] = tmp.faculty[5];*/
 
  ofstream rewrite("base.dat"); 
  rewrite.write("", 0); 
  rewrite.close();
 
 ifstream file("base.dat",ios::app);
 
    int x, i=0;
    int size=num_of_struct_element();
 
    for(x=0;x<size;x++)
    {
      file.read((char*)&tmp,sizeof(form));
      base[x] = tmp;
    }
     cout<<"9-"<<base[0].faculty;
 
ofstream file("base.dat",ios::app);
int i = 0;
for(i=0;i<1000;i++)
{ 
 tmp = base[i];
 file.write((char*)&tmp,sizeof(form));
}
file.close();
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
06.05.2012, 22:11     Довольно странный и смешной глюк. (и очень непонятный.) #4
Ну, два мелких замечания не по делу -- во первых, поле "пол" можно сделать булевым, т.е. оно будет в 8 раз меньше памяти занимать, а во вторых у вас не влезет 10 значный идентификационный код в int.
Второе. Вы писали оператор= или конструктор копий? Покажите. Если нет, то строка base[i]=tmp ничего хорошего не сделает.
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
06.05.2012, 22:21  [ТС]     Довольно странный и смешной глюк. (и очень непонятный.) #5
Спасибо. Учту по поводу булевых значений.
влезет 10 значный идентификационный код в int.
Да как бы уже влазит, пару раз его туда записывал))
[I]= или конструктор копий? Покажите. Если нет, то строка base=tmp ничего хорошего не сделает.
Я наверное полный нуб, но нет, не писал. Самое странное, что все прекрасно работает и так))

Значение фыкультета пропадает на ровном месте еще до передачи.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
06.05.2012, 22:26     Довольно странный и смешной глюк. (и очень непонятный.) #6
На счет инта я мог и ошибиться.
На счет конструктора копий -- это я увлекся, извините. Просто была похожая проблемма с классами...
Пропадает, т.е. на 2-й точке есть, а на 3-й -- уже нет?
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
06.05.2012, 22:36  [ТС]     Довольно странный и смешной глюк. (и очень непонятный.) #7
смотрите, я тут по тексту программы расставил строчки вроде "cout<<"1-"<<tmp.faculty;" чтоб мониторить, значение переменной. Первый сразу после ввода значения - выводит все павильно.
Затем 1.1, тоже показывает что данные еще в переменной. А вот 2, который я вывожу сразу после ввода в структуру последнего значения, почему-то показывает, что массив faculty пустой. Скриншот работающей программы есть в первом посте. Место, где все пропадает обозначено цифрой 4. Код этого момента -цифра 5.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
06.05.2012, 22:43     Довольно странный и смешной глюк. (и очень непонятный.) #8
Т.е., значение faculty пропадает на вводе национальности? Странно....
Буду думать....
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
06.05.2012, 22:59  [ТС]     Довольно странный и смешной глюк. (и очень непонятный.) #9
Давай, на тебя вся надежда. Если хочешь могу весь код выложить.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
06.05.2012, 23:00     Довольно странный и смешной глюк. (и очень непонятный.) #10
На всякий случай, давай.
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
06.05.2012, 23:07  [ТС]     Довольно странный и смешной глюк. (и очень непонятный.) #11
отправил в ЛС
Bers
Заблокирован
06.05.2012, 23:17     Довольно странный и смешной глюк. (и очень непонятный.) #12
Цитата Сообщение от UFO94 Посмотреть сообщение
поле "пол" можно сделать булевым, т.е. оно будет в 8 раз меньше памяти занимать,
ой ли?
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
06.05.2012, 23:18  [ТС]     Довольно странный и смешной глюк. (и очень непонятный.) #13
Пришло?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 11:01     Довольно странный и смешной глюк. (и очень непонятный.)
Еще ссылки по теме:

C++ Очень странный баг
C++ Глюк печатания и глюк порчи константы
Странный глюк цикла while C++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.05.2012, 11:01     Довольно странный и смешной глюк. (и очень непонятный.) #14
Цитата Сообщение от UFO94 Посмотреть сообщение
поле "пол" можно сделать булевым, т.е. оно будет в 8 раз меньше памяти занимать
Оно будет занимать в 32 раза больше памяти, чем вы думаете. Ибо
1) минимальный размер bool - 1 байт.
2) в структуре он выравнивается до 4 байт
Yandex
Объявления
07.05.2012, 11:01     Довольно странный и смешной глюк. (и очень непонятный.)
Ответ Создать тему
Опции темы

Текущее время: 08:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru