1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Flush cout output carefully

Discussion in 'C++' started by shabbir, Jul 6, 2005.

  1. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,293
    Likes Received:
    365
    Trophy Points:
    83
    When you compile the following code in VS 6 you get the output as

    Code:
    #include <iostream.h>
    #include <stdio.h>
    void main()
    {
      cout<<"hello";
      printf("hi");
    }
    hihello

    The reason behind this is cout is not flushed and you can get the desired out put by doing
    Code:
    #include <iostream.h>
    #include <stdio.h>
    void main()
    {
      cout<<"hello";
      flush(cout);
      printf("hi");
    }
    You can also use the <<endl; to flush the output after each cout but keep in mind that flushing the output can degrade performance.

    Thanks
    Shabbir Bhimani
     
  2. AhmedHan

    AhmedHan New Member

    Joined:
    Oct 11, 2005
    Messages:
    30
    Likes Received:
    0
    Trophy Points:
    0
    Home Page:
    Wov, that's really interesting.

    In which header flush() is defined in? stdio.h or iostream.h?
     
  3. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,293
    Likes Received:
    365
    Trophy Points:
    83
    Both.
     
  4. DaWei

    DaWei New Member

    Joined:
    Dec 6, 2006
    Messages:
    835
    Likes Received:
    5
    Trophy Points:
    0
    Occupation:
    Semi-retired EE
    Location:
    Texan now in Central NY
    Home Page:
    I might mention that iostream.h is deprecated and is provided for backward compatibility. One should use iostream without an extension. The phenomenon occurs because cout and printf use two different streams; they may, however, be synced. It is generally not good practice to mix the two forms.
     
  5. DaWei

    DaWei New Member

    Joined:
    Dec 6, 2006
    Messages:
    835
    Likes Received:
    5
    Trophy Points:
    0
    Occupation:
    Semi-retired EE
    Location:
    Texan now in Central NY
    Home Page:
    Forgot to mention that "void main" is non-standard code. The standard specifies that main return an int. Some compilers, particularly less compliant ones, accept the void specification, but its use is non-standard and not recommended practice.
     
  6. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,293
    Likes Received:
    365
    Trophy Points:
    83
    Both the points well accepted.
     
  7. rahul.mca2001

    rahul.mca2001 New Member

    Joined:
    Feb 13, 2008
    Messages:
    103
    Likes Received:
    0
    Trophy Points:
    0
    i will try to use flush now
     
  8. msdnguide

    msdnguide New Member

    Joined:
    May 14, 2011
    Messages:
    13
    Likes Received:
    0
    Trophy Points:
    0
    Occupation:
    msdnguide
    Location:
    Delhi
    Home Page:
    does <<endl; really flush the buffer? I seriously doubt coz putting \n in printf does not. then how can endl do that
     

Share This Page