Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
casper007
68 / 68 / 23
Регистрация: 12.12.2013
Сообщений: 410
#1

Захват ненужных данных - C++

05.04.2014, 00:26. Просмотров 223. Ответов 3
Метки нет (Все метки)

Здравствуйте! Помогите разобраться, почему считывается одно, а записывается другое.
Итак, имеется структура, которую использую для связанного списка:
C++
1
2
3
4
5
6
7
struct Baza
        {
            wchar_t Name[25],Surname[40], Klass[2], Bukva[2];
            Baza *Next, *Prev;
 
        };
Baza *Start, *Tek, *New;
А вот часть кода, где заполняется эта структура непосредственно из файла:
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
void ReadFile(void)
    {
        NNN=0;
     wifstream File; 
     locale loc("rus_rus.1251");
     File.imbue(loc);
     File.open(NameFile);
     Start=Tek=New=NULL;
     while(!File.eof())
         {
             New=new Baza;
             New->Next=NULL; New->Prev=NULL;
             File>>New->Name;
             File>>New->Surname;
             File>>New->Klass;
             File>>New->Bukva;
             if (Start == NULL) Start=New;
             else 
             {
                 Tek->Next=New;
                 New->Prev=Tek;
                 
             }
             Tek=New;
             NNN++;
         }
     File.close();
    }
Структура данных в файле "Имя Фамилия класс буква", где между словами табуляция.
При чтении из файла на этапе заполнения класса все нормально, в поле появляется нужное значение, но как только считали букву, то она, почему-то, выполняется контакация класса и буква.

Получаем на выходе, например, "11А А". Но если записывать число из разряда единиц, например, "7", то выводится как надо "7 А", хотя отвожу место под хранения 2-х символов.

Что не так? MVS 2010. #include<fstream>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2014, 00:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Захват ненужных данных (C++):

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

Захват файлов - C++
Доброго здравия вам. Я новенький в си, но с большим удовольствием поглощаю основы. Использую VS. К сожалению я не могу позволить себе...

Захват звука - C++
Надо захватить звук в буфер для анализа. Ёмкость буфера искуственно ограничить и хранить в нём только последние n секунд. При поступлении...

Захват функции ? - C++
Полиморфизм Полиморфизмом в программировании называется переопределение наследником функций-членов базового класса, например: class...

Захват и управление видеопотоком - C++
Здравствуйте. У меня определенная проблема, но нет знаний чтобы понять ее суть. Но есть стремление. Объясните пожалуйста, каким образом...

Захват видео с экрана - C++
Привет! С помощью чего можно захватить видео с экрана, желательно кроссово и на Qt, если нет, тогда чисто под винду ...

3
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2014, 00:38 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от casper007 Посмотреть сообщение
Klass[2]
Тут массив под строку из одного символа. Учитывайте, что функции чтения добавляют в массив '\0', поэтому для него должно быть место в массиве.
1
casper007
68 / 68 / 23
Регистрация: 12.12.2013
Сообщений: 410
05.04.2014, 00:43  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Учитывайте, что функции чтения добавляют в массив '\0',
Спасибо за помощь. Но вот только я не понял, каким, тогда, боком в массив записывалась еще и буква, если место только под один символ?
0
alsav22
5436 / 4831 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2014, 00:49 #4
Цитата Сообщение от casper007 Посмотреть сообщение
Но вот только я не понял, каким, тогда, боком в массив записывалась еще и буква, если место только под один символ?
Компилятор не отслеживает выход за границу массива. При работе кода, будет чтение, пока не залезет куда не нужно. Там структура, массивы в ней подряд идут, вот и читает в память.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 00:49
Привет! Вот еще темы с ответами:

Не работает захват видео - C++
выдаёт вот такие ошибки: Первый этап обработки исключения в &quot;0x7c80be74 (kernel32.dll)&quot; в &quot;cam.exe&quot;: 0xC0000005: Нарушение прав доступа...

Бесконечный захват памяти - C++
#include &lt;iostream&gt; using namespace std; typedef struct {double A;} F; void recurs (F X ; long i ) { i++ cout &lt;&lt; i&lt;&lt; &quot;...

Лямбды и захват переменных - C++
Лямбды могут захватывать переменные через {}. Вопрос: а куда, собственно, эти переменные захватываются - в статический буфер общий для всех...

Захват видео с камеры. OpenCV - C++
Добрый вечер, форумчане. Возникла проблема с захватом видео. Применяю библиотеку openCV 2.1. С одной камеры (USB) захват видео проходит...


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

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

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