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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Harradrush
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 3
#1

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

25.06.2009, 05:32. Просмотров 1717. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2009, 05:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некоректный вывод в файл (использовал fstream) (C++):

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

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

Некоректный вывод данных с использыванием метода класса - C++
Добрый вечер. Помогите разобраться. 1) Почему при выводе на экран результатов поля sname одинаковые? А оценки не соответствуют введенным?...

Ввод и вывод через fstream - C++
Непонятно почему не выводит в файл. Например в файле 123 &quot;аааббб&quot; а в файл 321 пустота, но если использовать разные имена потоков все ок. ...

Список, ввод-вывод через fstream - C++
Подскажите плс почему у меня вывод в файл не хочет делать?((( Это програма списка структур. Считывает данные с файла (файл текстовый в...

Запись в файл fstream - C++
Вот такой вот код , изобразил я для записи переменной в файл , проблема в том , что компилятор записывает в него не 10 раз L , а ...

7
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
25.06.2009, 07:10 #2
f.put(' ');

f.put('\n');

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

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

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

если хочется поизвращатся, можно повставлять seekg(xxx, ios::beg)
скорее всего, write просто не меняет указатель(вероятно, они у текстового и двоичного режима файл разные).
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,339
Завершенные тесты: 1
25.06.2009, 16:42 #6
что тебе нужно?ты вводишь текст и там в файле записывается тольок последнее слово как понял?
0
Harradrush
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 3
26.06.2009, 05:08  [ТС] #7
что тебе нужно?ты вводишь текст и там в файле записывается тольок последнее слово как понял?
В файле остаётся только 5 элементов массива (последнего элемента спика) которые выводятся в цикле for и переход на новую строку. Предыдущих элементов нет.
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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
28.06.2009, 06:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2009, 06:11
Привет! Вот еще темы с ответами:

Запись в файл fstream - C++
После первого прогона не выводит ничего из файла. void WriteInTheFile(fstream &amp;file_in) { file_in.seekg(0,file_in.end); char str;...

Fstream не видит файл - C++
Делаю лабу и возникла такая проблема - надо открыть текстовый файл. Файл лежит в одной папке c .exe . Но программа упорно не видит файл. ...

Fstream не видит файл - C++
Почему в Visual Studio2015 не находит текстовый файл, который лежит рядом с .exe? ifstream F; F.open(&quot;vacancy.txt&quot;); char...

Не перезаписывается файл. Работа с fstream - C++
Есть такой код std::fstream settingFile; Poco::Util::Application&amp; app = Poco::Util::Application::instance(); std::string...


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

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

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