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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
graney
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 7
#1

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

06.05.2012, 21:42. Просмотров 697. Ответов 13
Метки нет (Все метки)

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

Странный глюк с вектором - C++
Я определил операции: Присвоения: bool s; std::vector<int> v; void operator=(int get_i){ s = get_i < 0; // знак ...

Странный глюк цикла while - C++
Возник весьма странный глюк, связанный с циклом while. Имеется кусок программы: bool = true; while (bo=true){ ...

Странный глюк с биндом - C++
static void deXML(XMLBlock* RootBlock,Node* RN=NULL){ std::list<boost::thread> T; Node* SN=new...

Непонятный глюк при дебаге - C++
Курсор стоял на 200-й строке, я добавил Buffer в Watch и сразу вылезло окно call stack.

Очень странный баг - C++
Вообщем такая история. Программировал в Visual studio, залез в чужую память и после этого не могу правильно считать данные из текстовых...

странный "глюк" - C++
при опредедении следующего символьного массива: char с = "abcde"; ошибки нет. Всё понятно. Пять символов, плюс символ окончания строки...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
264 / 253 / 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
264 / 253 / 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
264 / 253 / 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
264 / 253 / 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
264 / 253 / 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++
Приписать к числу 1022 слева и справа по одной цифре так, что-бы полученное шестизначное число делилось на 7,8,9. Весь моск сломал. ...

Подскажите по C++ довольно простую литературу - C++
Проблема заключается в том, что мне бы хотелось изучить язык программирования C++. Вся сложность в моем непонимании многих нюансов данного...

Судоку. Задача довольно-таки интересная - C++
Написать программу через рекурсию, делающую судоку.... Добавлено через 2 часа 50 минут а вроде задание так звучит: дан текстовый...

Довольно Трудная задача(Двумерные массивы) - C++
Вот попалась такая задача: Найти седловую точку целочисленной матрицы с числом строк не более 12, числом столбцов не более 20....


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

Или воспользуйтесь поиском по форуму:
diagon
Higher
1928 / 1194 / 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     Довольно странный и смешной глюк. (и очень непонятный.)
Ответ Создать тему
Опции темы

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