Gå til innhold

Lukker konsollvinduet seg med en gang? Les her


Anbefalte innlegg

Jeg tror ikke det går en eneste uke uten at en eller annen presterer å lage en tråd om at det splitter nye Hello World-programmet bare åpner og lukker seg med en gang.

 

Til deg med dette problemet: Du er ikke alene, du kan søke hjelp. Ja, faktisk, bokstavelig talt søke. Forumet er proppfullt av tråder med akkurat samme problemstilling, og det står faktisk om det i en av stickytrådene, "Ofte stilte spørsmål med tilhørende svar".

 

Jeg siterer den tråden:

 

6. Når jeg kjører programmet kommer det en svart boks på skjermen i et lite sekund, og det skjer ikke noe mer. Hva er galt?

Når programmet er ferdig med å kjøre, med andre ord nesten med én gang, lukker det seg igjen (programmet returnerer). Problemet er at terminalen/konsollet programmet kjører i også lukkes igjen når programmet er ferdig. Det er flere måter å løse dette på:

- Kjør programmet direkte fra en terminal, fremfor å dobbeltklikke på ikonet. Da vil ikke terminalen lukke seg igjen etterpå.

- Sørg for at programmet venter på inndata før det lukker seg igjen. Du kan lese i denne tråden for en ekstensiv diskusjon om hva man kan gjøre og hva man bør gjøre.

 

For nybegynnere er det vel bare kode som må til for å hjelpe (og ikke bare veiledning). Legg til følgende i slutten av programmet (slutten av main, før return):

 

I C:

 

fflush(stdin);
getchar();

 

I C++ (av staalezh):

 

cin.ignore(numeric_limits<int>::max(), '\n');
cin.get();

 

Et annet alternativ, om du bruker Visual C++:

 

I VC++, start applikasjonen med CTRL+F5, så slipper man å dytte inn kode for å vente på tastetrykk ved avslutning. Ikke alltid denslags er hensiktsmessig.

 

Om du bruker XCode i OS X:

 

Her trengs ingen av disse ekstra linjene da "Run log" ikke lukker seg. Men "Run log" kan bli lang og uoversiktlig noe som kan fikses ved å trykke på X nederst til høyre.

 

Late Windows-brukere kan benytte system-funksjonen til å kalle pause-kommandoen. Legg til i slutten av main, før return:

 

system("pause");

Endret av Jaffe
Lenke til kommentar
Videoannonse
Annonse

Haha, ja! :D

Det er første gang i min tid her på forumet iallefall, det må jeg si.

Mac er vel egentlig ikke for utvikling da, det brukes vel i all hovedsak til design.

Mediaklassen har Mac, mens resten av winboxer. :wee:

 

Ja, det var bra den fikk sticky.

Takk til deg Zeph for å stikke innom denne delen av forumet, tror andre frykter det eller ikke bryr seg. :p

Lenke til kommentar
  • 4 måneder senere...

Et lite tips til meg selv:

Legg dette til før "return 0;" i C++.

Er det ikke utrolig at min Hello World resulterer i dette: ???

post-87384-1200178722_thumb.jpg

 

ENDRET: Beklager stort bilde.

 

Dere ser jeg la til dette her i tråden helt til slutt, litt for langt til slutt, så programmet sendte jo return før denne koden rakk å slå ut.

Endret av Matsemann
Lenke til kommentar

Jepp, og programmet virket alle andre ganger jeg kjørte det slik (annet enn at konsollvinduet lukket seg om jeg ikke kjørte det via CMD). Men fikk en liten støkk der: "Uaa! Kopierer Hello World! fra nettet og hele maskinen krasjer, hvordan skal dette ende?" :!:

 

ENDRET: Gjorde script om til program, da jeg så andre klagde på det i en annen tråd. ^^

Endret av Matsemann
Lenke til kommentar
  • 1 måned senere...

denne tråden er litt gammel så beklager hvis jeg bumper tråden eller noe, men man kan også kalle windows sin pause funksjon ved enten bruk av execve eller system("pause");

 

getchar() er rent pragmatisk sett endel bedre for å slippe overhead ved kall på eksterne kommandoer. Dette er også standard i Dev-cpp sin ide

Lenke til kommentar

Ja jeg er veldig enig :D desuten ser jeg at "execve" er et unix system kall, så jeg tror kanskje ikke den funker på windows (Selv om at den "CONFORMING TO POSIX"). Men men det er jo en mulighet å bruke "system" selv om den suger og da burde den jo være med i denne tråden

 

Edit, leif

Endret av aC
Lenke til kommentar
  • 8 måneder senere...
  • 1 måned senere...

I og med at det er en sticky så vil vell folk komme innom til tider, så da håper jeg det går bra med sein post.

 

Det jeg ofte bruker er rett og slett bare cin.get() eller en kombinasjon med cin.get() og cin.ignore() hvis jeg trenger en pause i programmet.

 

cin.get()

#include <iostream>
using namespace std;

int main(){

cout << "Hei!" << endl;
cout << "\n\n"; //valgfri
cout << "Press enter to continue.. "; //valgfri
cin.get();

return 0;

}

eller legge til en function hvis du trenger det mange ganger, som f.eks i text-baserte RPGs.

void Pause(){
cout << "\nPress enter to continue..";
cin.ignore(1, '\n');
cin.get();
}

 

Det fungerer helt fint under OS X. Vet ikke hvordan det er når man bruker windows, men i OS X, hvis du bare skal printe ut noe så enkelt som "Hello World" trenger du bare å bruke return 0 så vil den stoppe og venter på en tast.

Lenke til kommentar
  • 4 uker senere...

Det der skal ikke en gang kompilere...

 

Feilene er:

All koden være innenfor { }.

Videre vil ikke kode som kommer etter "return" bli utført.

Du må bruke " " ikke '' '', som kan være vanskelig å se i denne tråden. "a" gir en string med verdi a. 'a' gir en char med verdi a.

Så er det en feil i denne tråden, hvor det står at man bør bruke

cin.ignore(numeric_limits<int>::max(), '\n');
cin.get();

uten å fortelle at man også må ha med følgende linje på toppen av koden

#include <limits.h>

 

 

Med de endringene får man følgende fungere kode:

#include <iostream>
#include <limits>
using namespace std;

int main ()
{
cout << "hello world!";

cin.ignore(numeric_limits<int>::max(), '\n');
cin.get();
return 0;
}

Endret av Mr.Garibaldi
Lenke til kommentar
Det der skal ikke en gang kompilere...

 

Feilene er:

All koden være innenfor { }.

Videre vil ikke kode som kommer etter "return" bli utført.

Du må bruke " " ikke '' '', som kan være vanskelig å se i denne tråden. "a" gir en string med verdi a. 'a' gir en char med verdi a.

Så er det en feil i denne tråden, hvor det står at man bør bruke

cin.ignore(numeric_limits<int>::max(), '\n');
cin.get();

uten å fortelle at man også må ha med følgende linje på toppen av koden

#include <limits.h>

 

 

Med de endringene får man følgende fungere kode:

#include <iostream>
#include <limits>
using namespace std;

int main ()
{
cout << "hello world!";

cin.ignore(numeric_limits<int>::max(), '\n');
cin.get();
return 0;
}

nå funker det men er det noen som vet hvordan man kan få det til uten å starte kompilerings programmet for å kjøre det?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...