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

"4102" в конце файла при записи - C++

Восстановить пароль Регистрация
 
Алексей89
 Аватар для Алексей89
29 / 29 / 3
Регистрация: 19.02.2013
Сообщений: 107
19.02.2013, 01:11     "4102" в конце файла при записи #1
Я не программист, я радиофизик, но у меня возникла необходимость написать программу на c++
Суть проблемы:
по нажатии на кнопку в файл пишутся некоторые значения массива.
но при работе в различных режимах, так или иначе файл заканчивается цифрами "4102" с новой строки.
По количеству значений видно, что эти цифры просто дописываются (не вместо последнего числа)
Мне не ясен источник этой особенности, как его корректноо устранить?
Код модуля:
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
void __fastcall TQAtab::ButtonSaveClick(TObject *Sender)
{
int A, B, step;
unsigned int i;
extern int Kstep, cntr,Rin, Rout, CSin, CCSout;
extern unsigned int Kcmb;
extern unsigned int *PRes;      //Pointer Residue - глобальный указатель на целевой массив
ofstream outfile("cmb.dat");    //Объявление потока
if (!outfile)           //блок выявляющий случаи, когда файл не удалось открыть (создать)
{
Memo1->Lines->Add(Now().TimeString()+": "+"Файл не удалось создать");
return;
}
i=0;    //i - счётчик элементов массива
A=EditA->Text.ToInt();
if ((A<0)||(A>Kcmb))    //Проверка корректности значения A
{
Memo1->Lines->Add(Now().TimeString()+": "+"Запись файла невозможна Задайте другую начальную точку");
return;
}
B=EditB->Text.ToInt();          //Определение параметров масштабирования записи
if ((B<A)||(B>Kcmb))    //Проверка корректности значения B
{
Memo1->Lines->Add(Now().TimeString()+": "+"Запись файла невозможна Задайте другую конечную точку");
return;
}
step=EditStep->Text.ToInt();
if ((step<0)||(step>(B-A)))    //Проверка корректности значения step
{
Memo1->Lines->Add(Now().TimeString()+": "+"Запись файла невозможна Задайте другой шаг");
return;
}
for (i=A;i<B;i=i+step)          //Цикл записи в файл
{
outfile << PRes[i]<<'\n';       //Запись значения c переносом на следующую строку
}
outfile << PRes[B];             //Запись последнего (В-го) значения (как правило, не соответствует шагу)
Memo1->Lines->Add(Now().TimeString()+": сохранено в значениях от "+A+" до "+B+" c шагом "+step);
outfile.close();
в качестве библии пользуюсь: А.Я. Архангельский "O+Builder 6 СПРАВОЧНОЕ ПОСОБИЕ", оттуда и взял шаблон записи в файл "с помощью потоков в стиле С++".
Извините если вопрос глупый.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 01:11     "4102" в конце файла при записи
Посмотрите здесь:

C++ Нарушение прав доступа при записи "0x00000000"
C++ Избавиться от "Нажмите любую клавишу..." в конце программы, code::blocks
C++ "логическое" удаление записи из файла...
C++ Считать с файла информацию о команде "Название" "Город", количество побед, поражений, ничьих, забитых и пропущенных мячей
Выводит "мусор" при считывании файла C++
C++ При считывании файла выходит "мммммммммм"
C++ Нарушение прав доступа при записи "0xabababab"
C++ С++ ошибка 0xC0000005: Нарушение прав доступа при записи "0xcccccccc". Инициализация строк

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 10:46     "4102" в конце файла при записи #2
Цитата Сообщение от Алексей89 Посмотреть сообщение
for (i=A;i<B;i=i+step) //Цикл записи в файл { outfile << PRes[i]<<'\n'; //Запись значения c переносом на следующую строку } outfile << PRes[B];
а не
C++
1
 outfile << PRes[B-1]
ну или у тебя в массиве массиве точно есть В-ый элемент
Алексей89
 Аватар для Алексей89
29 / 29 / 3
Регистрация: 19.02.2013
Сообщений: 107
19.02.2013, 17:11  [ТС]     "4102" в конце файла при записи #3
Цитата Сообщение от aLarman Посмотреть сообщение
ну или у тебя в массиве точно есть В-ый элемент
Действительно В-го элемента не оказалось, оказывается если массив определён как:
C++
1
unsigned int *Res = new unsigned int [B];
то элементы определены в диапазоне от 0 до В-1, всего В элементов.
Спасибо
Yandex
Объявления
19.02.2013, 17:11     "4102" в конце файла при записи
Ответ Создать тему
Опции темы

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