Programfönstret stängs för snabbt

Fråga: Programfönstret stängs för snabbt så jag hinner inte se resultatet. Hur får man programföstret att vara synligt längre?

Detta är ett typiskt Windows-problem som hänger ihop med hur consolefönstret fungerar. När du startar ett console-program så öppnas det fula, svarta console-fönstret. Så fort programmet körts klart så stängs automatiskt detta fönster. Effekten blir att det sista som programmet skriver till fönstret inte hinner uppfattas. Inte roligt!

Det finns två olika lösningar på problemet. 
1. Du kan köra ditt program i ett öppnat fönster.
2. Du kan lägga in programkörningsstopp i ditt program.



1 Programkörning i redan öppnat fönster


Du kör programmet i ett öppnat fönster genom att klicka på 
Sedan klickar du på Kör (eller Run) och skriver command (se bilden nedan). När du nu klickar på Okey-knappen öppnas ett consolefönster. I consolefönstret skriver du sökväg + filnamn till ditt program, så startar programmet i det öppnade fönstret. Observera att fönstret INTE automatiskt stängs när programkörningen är klar.










Detta är egentligen ingen lösning på problemet utan bara ett sätt att välja programkörningsmiljö där effekten av att programmet avslutas inte blir negativt.


2A Programkörningsstopp med system("PAUSE")


Anropet system("PAUSE") kan läggas in i källkoden på den plats man vill att programmet ska stanna upp. Vanligtvis vill man nog ha ett stopp precis innan programmet avslutas, och då lägger man in anropet raden före return (se nedanstående exempel).

Programkörningsstopp med system("PAUSE")

#include <cstdlib> //Krävs för system("PAUSE")
#include <iostream>

using namespace std;

int main()
{
cout<<"Nu stannar programmet"<<endl;
system("PAUSE");
return 0;
}

Anropet system("PAUSE") genererar en textraden "Tryck på valfri tangent för att fortsätta..." på skärmen.


2B Programkörningsstopp med cin.get()


Liknande effekt som system("PAUSE") kan erhållas med cin.get() vilket dock lite krångligare. Grunden för användningen av cin.get() är samma som för system("PAUSE"), men cin.get() genererar ingen text till skärmen samt vill ha en Enter-tryckning för att fortsätta.

Programkörningsstopp med cin.get()

#include <iostream>

using namespace std;

int main()
{
cout<<"Nu stannar programmet"<<endl;
cin.get();
return 0;
}

Ovanstående fungerar inte om det skett inmatningar från användaren under programkörningen. Detta beror på att Enter-tryckningar då ligger kvar inmatninsbufferten. I sådana situationer skriver man två rader för att få ett programstopp. Först en rad som rensar inmatningsbufferten och därefter raden cin.get (se nedanstående exempel).

Programkörningsstopp med cin.ignore + cin.get

#include <iostream>

using namespace std;

int main()
{
cout<<"Mata in ett heltal"<<endl;
int tal;
cin>>tal;
cout<<"Tack för talet, tryck nu på Enter för att avsluta"<<endl;
cin.ignore(10,'\n');    //Tömmer inmatningsbufferten
cin.get();
return 0;
}