С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/55: Рейтинг темы: голосов - 55, средняя оценка - 4.58
0 / 1 / 0
Регистрация: 31.10.2018
Сообщений: 113

Функция flush() и clear()

07.06.2019, 13:35. Показов 11216. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня в main() последовательно вызывается 2 ф-и:
C++
1
2
    create(outfile,n); // создание файла cлучайных чисел  file.bin                                             
    outfile.flush();
C++
1
2
3
4
5
6
7
8
9
// создание файла из n cлучайных чисел
void create(ofstream &outfile, int   n)
{
    for (int i = 1; i <= n;  i++)
    {
        int v = rand() % 100;
 outfile.write(reinterpret_cast <char*> (&v), sizeof (int));
    }
}
Зачем здесь используется flush(), если мы и так каждый символ побайтово передали, и в буфере уже, по идее, не должно быть ничего?
И еще вопрос: зачем пишут infile.clear(), если перед этим сделали infile.close()?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2019, 13:35
Ответы с готовыми решениями:

Что делают методы clear() и flush() класса fstream
Подскажите, что делают методы clear() и flush() класса fstream)

Функция flush() на C/C++
Уважаемые эксперты, обясните пожалуйста функцию flush() на C/C++... Буду очень благодарен...

При нажатии на кнопку "Сбросить " не запускается функция clear()
При нажатии на кнопку &quot;Сбросить &quot; не запускается функция clear() &lt;!doctype html&gt; &lt;head&gt; &lt;meta...

6
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 14:14
Лучший ответ Сообщение было отмечено TimaGera31 как решение

Решение

Цитата Сообщение от TimaGera31 Посмотреть сообщение
Зачем здесь используется flush(), если мы и так каждый символ побайтово передали, и в буфере уже, по идее, не должно быть ничего?
И еще вопрос: зачем пишут infile.clear(), если перед этим сделали infile.close()?
При записи данных в файл, те сначала пишутся не на диск, а в кэш. flush() принудительно сбрасывает их на диск.

Добавлено через 2 минуты
Цитата Сообщение от TimaGera31 Посмотреть сообщение
И еще вопрос: зачем пишут infile.clear(), если перед этим сделали infile.close()?
clear() сбрасывает флаги потока. Надо смотреть, что там делается после
1
0 / 1 / 0
Регистрация: 31.10.2018
Сообщений: 113
07.06.2019, 15:16  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
При записи данных в файл, те сначала пишутся не на диск, а в кэш. flush() принудительно сбрасывает их на диск.
Так а зачем это делать, если данные уже побитово выведены в файл?

Добавлено через 1 минуту
Я весь код скину
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <ctime>
#include <stdlib.h>
#include <fstream>
#include <iostream>
using namespace std;
 
void create(ofstream&,int);      // создание файла cл. чисел
void read_file(ifstream &);      // вывод на экран 
          // создание файла четных чисел из файла исходного
void create_chet(ofstream &, ifstream &);  
 
int main()
{   srand((unsigned)time(NULL));
    int n;
    cout<<"enter n"<<endl; cin>>n; // количество чисел файла
    // открыть file.bin  с именем outfile  для записи 
    ofstream outfile("file.bin",ios::binary);               
    if (!outfile)
      { cout<<"error1"<<endl; 
        return 1;
      }
               // создание файла cл. чисел  file.bin
    create(outfile,n);                                              
    outfile.flush();
 
         // открыть file.bin  с именем infile  для чтения 
  ifstream infile ("file.bin", ios::binary);          
  if (!infile)
    { cout<<"error2"<<endl; 
      return 2;
     }
 
    read_file(infile);      // вывод на экран file.bin
    infile.close();
 // открыть file1.bin  с  именем outfile_new  для записи 
    ofstream outfile_new ("file1.bin", ios::binary);    
    if (!outfile_new)
      { cout<<"error3"<<endl; 
        return 3;
       }
 // открыть file.bin с программным именем infile  для чтения 
    infile.clear();//ВОТ ЭТО МЕСТО
    infile.open("file.bin", ios::binary);           
    if (!infile)
      { cout<<"error4"<<endl; 
        return 4;
       }
                 // создание файла четных чисел file1.bin  
                 // из файла исходного file.bin
    create_chet(outfile_new,infile);  
    outfile_new.flush();        // outfile_new.close();
    infile.close();
//открыть file1.bin  с программным именем infile  для чтения 
    infile.clear();
    infile.open("file1.bin", ios::binary);   
    if (!infile) 
      { cout<<"error5"<<endl; 
        return 5;
      }
             // вывод на экран файла четных чисел file1.bin
    read_file(infile); 
    infile.close();
    return 0; 
}
    
                     // создание файла из n cл. чисел
void create(ofstream &outfile, int   n)
{
    for (int i = 1; i <= n;  i++)
    {
        int v = rand() % 100;
 outfile.write(reinterpret_cast <char*> (&v), sizeof (int));
    }
}
                     // вывод на экран чисел файла 
void read_file(ifstream &infile) 
{
    int v;
    infile.read(reinterpret_cast<char*>(&v),sizeof (int));
    while( !infile.eof())
    {
        cout<<v<<" ";
    infile.read(reinterpret_cast<char*>(&v),sizeof (int));
    }   
    cout<<endl;
}
         // создание файла четных чисел из файла исходного
void create_chet(ofstream &outfile_new,  ifstream &infile) 
{
    int ch;
 
    infile.read(reinterpret_cast<char*>(&ch), sizeof(int));
 
    while (infile) 
    {
        if(ch % 2 == 0)
        outfile_new.write(reinterpret_cast<char*>(&ch), 
                          sizeof (int));
        infile.read(reinterpret_cast<char*>(&ch), 
                     sizeof(int));
    }
}
Добавлено через 44 секунды
42 строчка кода
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 15:26
Цитата Сообщение от TimaGera31 Посмотреть сообщение
Так а зачем это делать, если данные уже побитово выведены в файл?
Они не выведены в файл, они ещё висят в памяти какое-то время. И, если не сделать flush (Хотя, можно было бы просто закрыть файл, наверное), то ifstream infile ("file.bin", ios::binary); просто может не увидеть этих изменений.

Добавлено через 1 минуту
Цитата Сообщение от TimaGera31 Посмотреть сообщение
// открыть file.bin с программным именем infile *для чтения
* * infile.clear();//ВОТ ЭТО МЕСТО
Мне кажется, здесь это не нужно
0
0 / 1 / 0
Регистрация: 31.10.2018
Сообщений: 113
07.06.2019, 16:11  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
clear() сбрасывает флаги потока. Надо смотреть, что там делается после
А как это понять? В этом коде clear() не единожды встречается
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 16:19
Цитата Сообщение от TimaGera31 Посмотреть сообщение
А как это понять? В этом коде clear() не единожды встречается
Когда ты, например, читаешь из потока число, а там буквы, то поток устанавливает флаг ошибки. Ты можешь вызвать clear(), т.е. сбросить этот флаг, и читать из потока дальше.
Зачем его вызывать для закрытого потока, перед open(), я не знаю.
0
0 / 1 / 0
Регистрация: 31.10.2018
Сообщений: 113
07.06.2019, 19:44  [ТС]
Ну ладно, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2019, 19:44
Помогаю со студенческими работами здесь

Есть ли в Паскале функция "Clear screen"?
САлам ЛОКИ и ЦЕРБЕР ! ПОмагите чайнику ... есть ли в Паскале функция &quot;Clear screen &quot; , если да то можно вкратце ее использование ! Мне в...

Как Вам фраза read/clear (rc_w1) Software can read as well as clear this bit by writing 1. Writing ‘0’ has no effect on
Как Вам фраза из списка аббревиатур STM32, то есть, чтоб сбросить в ноль бит надо записать туда единицу, гениально. А если Вы запишите туда...

Flush в js
Привет читателям! Помогите решить &quot;задачку&quot;: 1 нажимаем кнопку 2 на странице выводится картинка(анимация) 3 формируется результат ...

Flush priveleges
CRETE USER `name` IDENTIFIED BY `pass` пользователь родился, но не может содать базу. Access denied for THIS user... как...

ob_flush() flush()
Мне понадобилось выводить echo во время выполнения скрипта. Использовал такой код: &lt;? ob_start(); for($i=0;$i&lt;4;$i++) { echo...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru