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

Странный вывод cout - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как вычислить определитель для двух разных матриц http://www.cyberforum.ru/cpp-beginners/thread1178031.html
У меня написана функция для нахождения определителей матриц.Есть две матрицы разных порядков.Как найти определители каждой из этих матриц.То есть как вызвать функцию определителя для каждой из таких матриц?
C++ Вывод текстового сообщения на консоль Добрый день форумчане. Начал изучать плюсы и встретил два вида вывода сообщений: cout << "Hello, world!"; std::cout << "Hello, world!" << std::endl; Встретил в двух разных источниках и возник вопрос : Какая разница между этими формами вывода? http://www.cyberforum.ru/cpp-beginners/thread1178010.html
C++ Объясните, как в данном примере работают виртуальные функции?
Такое дело надо обьяснить особенность виртуальной функции, типо как будет работать программа без виртуальных функций #include <iostream> #include <string.h> using namespace std; class Toy{ protected: char name; int cost;
C++ Массив и вектор
Не могу понят почему не работает данный код. Точнее оно работало правильно. Но перестал работать. Ввел малозначительные изменение перестал работать. Убрал все изменение не работает. #include <iostream> #include <conio.h> #include <vector> using std::vector; int main() { setlocale (LC_ALL, "Russian"); vector<int> num;
C++ Из заданной строки удалить слова, длина которых меньше указанной. http://www.cyberforum.ru/cpp-beginners/thread1177964.html
Помогите написать программу которая из заданной символьной строки удаляет слова длина которых меньше указанной пользователем.
C++ Вырезание строк из 1.txt, номера строк находятся в 2.txt Суть такова: есть 2 файла ПРИМЕР 1: \684763137613131788184831538 \1587435121531185145 \dfgsdg46415315dsfg413ds1g \ыпывапвап354513ыаы3а1ы \фв3455фывфыв545ф4ыв \фыв5444444415ааываф подробнее

Показать сообщение отдельно
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.05.2014, 17:59     Странный вывод cout
Дело в том что данные которые вы передаете в поток буферезуются. Т.е. все данные сперва помещаются в буфер где храняться до тех пор пока не наступит событие заставляющее буфер сбросить свое содержимое в устройство вывода то бишь в консоль.
Принудительно сбросить содержимое буфера можно несколькими способами:
-явно дать команду опустошить буфер:
C++
1
cout.flish
Вот на нем и остановимся.
Так вот манипулятор endl не просто переводит каретку на новую строку, но и дает команду потоку освободить свой буфер. Примерная реализация этого манипулятора может иметь такой вид:
C++
1
2
3
4
  template<typename _CharT, typename _Traits>
    inline basic_ostream<_CharT, _Traits>&
    endl(basic_ostream<_CharT, _Traits>& __os)
    { return flush(__os.put(__os.widen('\n'))); }
Как видете сперва в поток помещается управляющий символ '\n', а затем командой flush освобождается буфер.
Теперь если вы не даете команду потоку освободить буфер данные которые вы будете в него помещать остануться в буфере до тех пор пока не возникнет необходимость сбросить его содержимое в консоль. Это происходи также при переполнении буфера либо при использовании потока cin так как они связанны между собой.
В вашем пером коде как раз таки и отсутствует управляющие конструкции сбрасывающие буфер вот поэтому данные накапливаются в памяти и не выводятся на консоль.
Попробуйте запустить вот этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
  cout<<"This is LED => ";
  int k = 0;
    while(k < 10){
        static int flag = 0;
        if (flag){
            cout<<"*";
            flag=0;
        }
        else {
            cout<<" ";
            flag=1;
        }
        sleep(1);
        ++k;
    }
    cout << endl;
    return 0;
}
Теоретически вывод должен произойти только при выходе их цикла. Однако у меня буфер очищается на каждом тике. Может у вас будет вывод только при выходе из цикла...
 
Текущее время: 16:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru