Question

How to clear screen in console application

Asked by: browerjason

I have taken several intro to programming classes like Java, C and C++.  I have had to develop many console applications since I started these courses.  The one thing that I always hated was, that after I asked a few questions from the user, the screen would just continue to scroll like at a unix command prompt when typing many commands.  I want to be able to clear the screen on command.  How can I do this?? What is the function and what header file is it located in??


Jason

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2000-06-16 at 01:27:28ID10465598
Tags

clear

,

screen

,

console

Topics

C++ Programming Language

,

Microsoft Visual C++

Participating Experts
9
Points
30
Comments
23

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Intro
    I need some help a online recource that will teach me Unix. A URL or something.
  2. Scrolling Star Wars intro text script
    Hi all, I am looking for a script that will provide me with a "star wars" intro style of scrolling for some text. I have found some around the net, however they are very jerky and not very well designed. Whati need is something that basically scrolls up and the tex...
  3. Clearing the console
    Hi, Im mofiying a friends program that finds its way through a maze, and would like to know how to clear the console in java so when I reprint the maze for every step the old step doesnt appear right above it, thanks!
  4. Please recommend good .NET intro
    Hi Experts Could someone recommend a good intro to .NET for an experienced VB & ASP programmer? And, if possible, could they explain here: what is the big deal with .NET? Why should I bother? I can't get a straight answer out of anyone about it.

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: wataruPosted on 2000-06-16 at 01:46:31ID: 2961354

Try this

putchar (14); // clear screen
putchar (7); // beep

 

by: pepenietoPosted on 2000-06-16 at 01:56:51ID: 2961464

I think that clear the screen is depending of the OS, but if the OS is compliant with ANSI standard, try to write to console the scape secuence the command for clear the screen:
printf( "\33[2J"); // Example in C/C++
// "\33" is the scape caracter (0x1b)
If your OS is DOS/WINDOWS, you must to load in your config.sys the ansi.sys driver for make your OS an ANSI compliant.

 

by: wataruPosted on 2000-06-16 at 02:07:12ID: 2961554

wataru changed the proposed answer to a comment

 

by: nietodPosted on 2000-06-16 at 03:29:04ID: 2962215

C++ provides no mechanism for this.   C++ is OS and hardware independant.  So C++ does not even assume there is a screen, much less that it can be cleared (C++ might be ouputting to a teletype, and you can't clear a teletype.)

However, there are OS-specifc and hardware specific wasy to do this.  But you haven't told us the OS or hardware you are using.

For example in windows you can use:

From
http://support.microsoft.com/support/kb/articles/q99/2/61.asp

/* Standard error macro for reporting API errors */
   #define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \
      on line %d\n", __FILE__, GetLastError(), api, __LINE__);}

   void cls( HANDLE hConsole )
   {
      COORD coordScreen = { 0, 0 };    /* here's where we'll home the
                                          cursor */
      BOOL bSuccess;
      DWORD cCharsWritten;
      CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */
      DWORD dwConSize;                 /* number of character cells in
                                          the current buffer */

      /* get the number of character cells in the current buffer */

      bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
      PERR( bSuccess, "GetConsoleScreenBufferInfo" );
      dwConSize = csbi.dwSize.X * csbi.dwSize.Y;

      /* fill the entire screen with blanks */

      bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
         dwConSize, coordScreen, &cCharsWritten );
      PERR( bSuccess, "FillConsoleOutputCharacter" );

      /* get the current text attribute */

      bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
      PERR( bSuccess, "ConsoleScreenBufferInfo" );

      /* now set the buffer's attributes accordingly */

      bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
         dwConSize, coordScreen, &cCharsWritten );
      PERR( bSuccess, "FillConsoleOutputAttribute" );

      /* put the cursor at (0, 0) */

      bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );
      PERR( bSuccess, "SetConsoleCursorPosition" );
      return;
   }

 

by: arnondPosted on 2000-06-16 at 05:53:21ID: 2963425

Since you're uing the term "console application" I'm asuming that you're using windows (since this is the term used by MSVC).
I would use the clrcsr() function (and include the conio.h file". This function is a DOS function but I think that MSVC has it too. (not sure).

Hope it helps,
Arnon David.

 

by: nietodPosted on 2000-06-16 at 06:06:13ID: 2963556

there is no clrscr() function in the VC library.  All non stadnard functions begin with an underscore, so it would be _clrscr(), but there isn't a _clrscr() either.   If this is for a win32 console, the best way would be to use the console API functions, as they are portable to other compilers.

 

by: tdubroffPosted on 2000-06-16 at 06:20:24ID: 2963770

#include <stdlib.h>

system("cls");

 

by: nietodPosted on 2000-06-16 at 06:34:19ID: 2963881

That won't work on all computers.  "cls" is not universal--at all  More importantly it is a very very ineficient way to clear the screen.  That has to start a new process just to clear the screen.

 

by: tdubroffPosted on 2000-06-16 at 07:03:39ID: 2964231

True, but it is simply coded and will work on Windows PC's....and probably quite a few UNIX systems too.

 

by: pepenietoPosted on 2000-06-16 at 07:17:35ID: 2964420

simply coded?
ok, but as nietod commented, it create a new process.
I think that is a very high price for clearing the screen.
I still think that the ANSI sequence is the best way: very simple and very portable...

 

by: nietodPosted on 2000-06-16 at 07:37:31ID: 2964677

The ANSI method is not very portable anymore.  ANSI-compatible consoles are a thing of the past.  Almost all computers these days use graphical interfaces, even main-frames.  If you really need to support a lot of OSs that probably would be your best bet, but...I wouldn't want count on it.   I think I would prefer an OS-dependant method that is likely to be supported on the OS well into the future and without concern for hardware or compiler support.

 

by: browerjasonPosted on 2000-06-16 at 11:36:43ID: 2967122

Answer accepted

 

by: browerjasonPosted on 2000-06-16 at 11:36:44ID: 2967123

Thanks,
     Your answer is the only one I could get to work on my Windows 98 system using Visual C++.  However, I am still interested in some of the other intelligent feedback I got on this question.

1)  One of you had mentioned to use the header file <conio.h> and the funtcion clrscr().  I saw this done in someone elses program on the net, but could not find that function in my header file.  This makes me wonder how the other person got this to work.

2)  I am also interested in the ANSI escape sequence that was mentioned.  I tried  "printf("\33[2]"); ", but my machine printed out "<- [2]" instead of clearing the screen.

I appreciate all the feedback.  I am now happy that I can clear the screen with the system("cls") method, but I am interested in some working alternative methods as well.

Thanks

Jason

 

by: nietodPosted on 2000-06-16 at 11:48:52ID: 2967238

You chose a very poor method.  Its increadibly inneficient--absurdly so.  You are litterlly suspending your program so another program (command.com) can be run.  That program then starts a second program (cls.exe) which forces command .com to be suspended.  then the screen is cleared, cls.exe ends.  Then command.com is resumed and exits.  Then your program resumes.  That is a heck of a lot of work, just to clear the screen!

>>  the funtcion clrscr().
I explain that was not standard.  VC doesn't include it.  It doesn't have to.

>>  I am also interested in the ANSI escape sequence
That is not standard either.  You can make it work if you have ansi.sys, but I woul;dn't recommend going that way unless you have to run onother platforms.  In that case it is your best bet, and it is very bad bet.

Did you try using the windows API functions?  If you are programming only for windows that would be the best way.  It is simple, fast, and standard (for windows).

 

by: browerjasonPosted on 2000-06-16 at 17:06:24ID: 2969701

No I didn't try the API functions because I am too new to be famialar with them.  The reason I chose the method that I did, was because it was the ONLY one that was suggested that worked.  Effeicency was not my immediate concern, solving the problem was.  If I knew how to use the API functions, then I would use them, but until then, the method that was suggested works great.

Thanks

 

by: nietodPosted on 2000-06-16 at 17:45:41ID: 2969826

I posted the code.  Copy it into your program and add

#include <windows.h>

to the top.  Then call cls() to clear the screen.

 

by: pepenietoPosted on 2000-06-18 at 22:50:06ID: 2985193

browerjason:
If you´re interested in the ANSI sequence, change the ']' for 'J', and load ansi.sys in your config.sys file.

nietod:
do you think this is not standard?
what´s the meaning of the 'S' of ANSI?
This sequence works on all VT terminal consoles, even I probed it in a small console of a computer in a car...

 

by: nietodPosted on 2000-06-19 at 04:22:11ID: 2988854

>>  all VT terminal consoles
That doesn't make it standard.  You can just write to video memory at the DOS video base address.  That works on all PCs,  Is that standard?  Its standard for a limited number of cases that choose to follow an uninforced standard.  For some concrete examples ANSI escape sequences, don't work on televideo terminals.  They don't work on Mac computers.  There is no ANSI.SYS type feature available to make them work.  They don't work on molecular consoles...   There probably 100s of other cases where they don't work.  They work in a relatively specific--and these days rare--case.

 

by: hitthefloorPosted on 2004-01-30 at 15:50:01ID: 10239744

I've tried all of these methods and none of them have worked for me.  Anyone have any other ideas?

 

by: jonnykeoghPosted on 2004-02-20 at 04:12:08ID: 10411559

You could just:

int cls(void)
{
     gotoxy(1,1);

}

 

by: jonnykeoghPosted on 2004-02-20 at 04:15:07ID: 10411577

shoot
sorry!!

Stupid machine killed my code!

I really meant to say:

int cls(void)
{
    int x;
    gotoxy(1,1);
    for(x=0;x<80000;x++)
    {
          printf("   ");
    }
    gotoxy(1,1);
    return 1;
}

That should work. Although it does not clear the stdout (or stdin), it clears the console screen.

Thanx

Jonny K
(I may be a kid, but I'm a good programmer!)

 

by: Assembly_dot_NETPosted on 2004-05-07 at 06:49:33ID: 11014698

// adapted from:
//    MSDN\Platform SDK\Reference\Code Sample\WINUI\CONSOLE\CONSOLE.C

void cls()
{
  COORD coordScreen = { 0, 0 }; /* here's where we'll home the cursor */
  DWORD cCharsWritten;
  CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */
  DWORD dwConSize; /* number of character cells in the current buffer */
 
  /* get the output console handle */
  HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
  /* get the number of character cells in the current buffer */
  GetConsoleScreenBufferInfo(hConsole, &csbi);
  dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
  /* fill the entire screen with blanks */
  FillConsoleOutputCharacter(hConsole, (TCHAR) ' ',
      dwConSize, coordScreen, &cCharsWritten);
  /* get the current text attribute */
  GetConsoleScreenBufferInfo(hConsole, &csbi);
  /* now set the buffer's attributes accordingly */
  FillConsoleOutputAttribute(hConsole, csbi.wAttributes,
      dwConSize, coordScreen, &cCharsWritten);
  /* put the cursor at (0, 0) */
  SetConsoleCursorPosition(hConsole, coordScreen);
  return;
}

 

by: dancetraxxPosted on 2004-12-29 at 11:52:50ID: 12921536

Anyone any ideas on how to close down the console window completely?

Im using nested loops and so break just doesnt work!

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...