Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 3
1

Некоректный вывод в файл (использовал fstream)

25.06.2009, 05:32. Просмотров 1879. Ответов 7
Метки нет (Все метки)

такая функция
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
void Save(DATA **pbeg)
{
    system("cls");
 
    DATA *pv; //указатель на структуру
    char filename[200];
    cout<<"Сохранение"<<endl;
    cout<<"Введите путь к файлу: ";
    cin>>filename;
    
    ofstream f;
    f.open(filename,ios::app);
    
    if (!f)
    {
        cout<<"Файл не найден";
        Save(pbeg);
    }
    else
    {
        pv=*pbeg; //pbeg -это указатель на начало списка
        while (pv)
        {
            for (int i=0; i<5; i++)
            {
                f.write(pv->namei[i], strlen(pv->namei[i]));
                f.put(' ');
            }
            f.put('\n');
            pv=pv->next;
        }
        cout<<endl<<"Сохранено"<<endl<<"Нажмите любую клавишу";
        _getch();
    }
}
сама структура:
C++
1
2
3
4
5
6
struct DATA
{
    char namei[5][64];
    DATA *prev;
    DATA *next;
};
Проблема такая, в файл выводится только последний элемент списка. Вроде бы позиция записи почему то сбрасывается на начало файла на каждой итерации while. Не могу понять в чём причина.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2009, 05:32
Ответы с готовыми решениями:

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

Некоректный вывод массива String в файл
Народ такой косяк есть массив wordArray стринговый в нем 1001 элемент когда вывожу вот так в файл,...

Не хочет работать вывод в файл через fstream и <<
Открывается файл, считывает пару строк, освобождаем буфер потока (хотя их вроде бы два при...

Некоректный вывод
var Form17: TForm17; Image1:TImage; mass1:array of TImage; Lab1:TLabel; m1:array of...

7
304 / 157 / 11
Регистрация: 07.06.2009
Сообщений: 538
25.06.2009, 07:10 2
f.put(' ');

f.put('\n');

вот изза них наверно и збасывается, юзай везде f.write или <<
0
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
25.06.2009, 07:29 3
Цитата Сообщение от Harradrush Посмотреть сообщение
такая функция
Проблема такая, в файл выводится только последний элемент списка. Вроде бы позиция записи почему то сбрасывается на начало файла на каждой итерации while. Не могу понять в чём причина.
Есть мнение, что в функции все работает, ну разве что можно в конце f.close() добавить. Скореее всего беда в получаемых данных.
Удач.
0
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 3
25.06.2009, 07:29  [ТС] 4
f.put(' ');

f.put('\n');
Не из-за этого, проверил - то же самое
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
25.06.2009, 08:11 5
вообще-то
write - предназначен для работы с двоичными файлами,
put - с текстовыми.
что за хрень получается, если намешать одно с другим, я не знаю.

p.s. кстати, по умолчанию, файл открывается в текстовом режиме,
так что использование write в такой ситуации недокументировано.

если хочется поизвращатся, можно повставлять seekg(xxx, ios::beg)
скорее всего, write просто не меняет указатель(вероятно, они у текстового и двоичного режима файл разные).
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
25.06.2009, 16:42 6
что тебе нужно?ты вводишь текст и там в файле записывается тольок последнее слово как понял?
0
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 3
26.06.2009, 05:08  [ТС] 7
что тебе нужно?ты вводишь текст и там в файле записывается тольок последнее слово как понял?
В файле остаётся только 5 элементов массива (последнего элемента спика) которые выводятся в цикле for и переход на новую строку. Предыдущих элементов нет.
0
4845 / 3266 / 465
Регистрация: 10.12.2008
Сообщений: 10,569
28.06.2009, 06:11 8
C++
1
2
3
4
5
    for (int i=0; i < 5; i++) {
        f.write(pv->namei[i], strlen(pv->namei[i]));
        f.put(' ');
    }
    f.put('\n');
C++
1
2
3
4
    for (int i=0; i < 5; i++)
        f << pv->namei[i]
          << " ";
    f << endl;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2009, 06:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Некоректный вывод таблицы
Здравствуйте! Подскажите пожалуйста, как оформить корректный вывод таблицы в oracle 11.1! ...

Некоректный вывод массива
Доброго времени суток! Вот такая проблема: при чтении с файла(вложение 1) в массив строк и при...

Некоректный вывод переменной extern
Есть заголовочный файл в котором объявлена переменная extern, пытаюсь взаимодействовать с этой...

Некоректный вывод цифр OPENGL
У меня есть график на котором есть функция,цифры насечки и т.д.Но есть 1 проблема с выводом цифр.На...


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

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

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