C++ Kommandotolken stänger sig självt

Trädvy Permalänk
Medlem
Registrerad
Sep 2010

C++ Kommandotolken stänger sig självt

Hej,

Har nyligen börjat programmera lite på egen hand och tog tag i C++. Problemet är att jag inte förstår varför kommandotolken stänger sig självt fastän jag använder cin.get(); i slutet av programmet innan return 0;. Skulle verkligen uppskatta om någon kunde förklara varför detta händer.

#include <iostream> using namespace std; int main() { int dag_antal; int dagspris; cout << "Antal dagar?"; cin >> dag_antal; cout << "Pris per dag?"; cin >> dagspris; cout << "Totalt pris:" << dag_antal * dagspris << endl; cin.get(); return 0; }

Här är det korta programmet jag skrev som bara stänger sig självt efter att jag matar in det andra värdet. Skrev ett klassiskt "Hello world!" tidigare där cin.get(); fungerade som det skulle, men det gör inte det här av någon anledning.

Tack på förhand för svar!

In Win D-frame mini | 4690K | GTX 980 Strix | Asus Z97i-Plus | 2x8GB Corsair Dominator

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Jul 2011
Skrivet av fromis:

Hej,

Har nyligen börjat programmera lite på egen hand och tog tag i C++. Problemet är att jag inte förstår varför kommandotolken stänger sig självt fastän jag använder cin.get(); i slutet av programmet innan return 0;. Skulle verkligen uppskatta om någon kunde förklara varför detta händer.

#include <iostream> using namespace std; int main() { int dag_antal; int dagspris; cout << "Antal dagar?"; cin >> dag_antal; cout << "Pris per dag?"; cin >> dagspris; cout << "Totalt pris:" << dag_antal * dagspris << endl; cin.get(); return 0; }

Här är det korta programmet jag skrev som bara stänger sig självt efter att jag matar in det andra värdet. Skrev ett klassiskt "Hello world!" tidigare där cin.get(); fungerade som det skulle, men det gör inte det här av någon anledning.

Tack på förhand för svar!

Formaterad inmatning har en tendens att lämna en massa tecken på inströmmen. Det gör att det finns ett tecken för cin.get() att läsa (utan att du behöver peta på tangentbordet). Pröva att loopa över cin.get() och skriv ut vad det lämnar ifrån sig för att undersöka närmare.

Om du bara vill stanna ett tag på slutet så kan du köra med system("pause"); innan return. Skall dock inte användas till annat. Andra metoder är att sätta en breakpoint vid return eller att (om det är Visual Studio) gå in och ändra hur körning av kod ser ut för att få en paus inlagd.

.<

Trädvy Permalänk
Medlem
Registrerad
Nov 2011

Du kan prova med att lägga till cin.ignore(); efter cin.get();
Tror att det kommer fungera

Mvh

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Registrerad
Sep 2010

@oelrich: Tack för hjälpen! system("pause"); löste problemet lite konstigt att inte cin.get(); fungerar men det har säkert med göra med inmatningen som du pratade om. Är en riktigt novis när det kommer till programmering, ville egentligen bara förstå varför det inte fungerade

@noordan Testade båda men ingen av dem verkar fungera.

In Win D-frame mini | 4690K | GTX 980 Strix | Asus Z97i-Plus | 2x8GB Corsair Dominator

Trädvy Permalänk
Medlem
Registrerad
Nov 2011
Skrivet av fromis:

@oelrich: Tack för hjälpen! system("pause"); löste problemet lite konstigt att inte cin.get(); fungerar men det har säkert med göra med inmatningen som du pratade om. Är en riktigt novis när det kommer till programmering, ville egentligen bara förstå varför det inte fungerade

@noordan Testade båda men ingen av dem verkar fungera.

Skönt att det löste sig! Men fungerade det inte ens om du använde båda samtidigt?

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Jul 2011
Skrivet av fromis:

@oelrich: Tack för hjälpen! system("pause"); löste problemet lite konstigt att inte cin.get(); fungerar men det har säkert med göra med inmatningen som du pratade om. Är en riktigt novis när det kommer till programmering, ville egentligen bara förstå varför det inte fungerade

@noordan Testade båda men ingen av dem verkar fungera.

Skrivet av noordan:

Skönt att det löste sig! Men fungerade det inte ens om du använde båda samtidigt?

Skickades från m.sweclockers.com

För att det skall fungera behöver man köra dem i omvänd ordning.

cin.ignore(); cin.get();

Eventuellt så raderar det bara ett tecken, men kan räcka i ditt fall. Annars går det att ange hur många tecken ignore() skall skippa samt om det skall avbryta vid något tecken. Så man kan till exempel skippa tusen tecken om inget av dem är komma.

Undersök vad som finns i cin genom något i stil med:

while(auto c = cin.get()) // ta nästa tecken som ligger i cin { cout << "hittade: " << c << endl; // skriv ut tecknets numeriska värde cout << "tecken: " << static_cast<char>(c) << endl; // och om det motsvarar något skrivbart if( c == 'q') // avsluta om q hittas { break; } }

.<

Trädvy Permalänk
Medlem
Plats
Götet, typ
Registrerad
Okt 2004
Skrivet av fromis:

Hej,

Har nyligen börjat programmera lite på egen hand och tog tag i C++. Problemet är att jag inte förstår varför kommandotolken stänger sig självt fastän jag använder cin.get(); i slutet av programmet innan return 0;. Skulle verkligen uppskatta om någon kunde förklara varför detta händer.

#include <iostream> using namespace std; int main() { int dag_antal; int dagspris; cout << "Antal dagar?"; cin >> dag_antal; cout << "Pris per dag?"; cin >> dagspris; cout << "Totalt pris:" << dag_antal * dagspris << endl; cin.get(); return 0; }

Här är det korta programmet jag skrev som bara stänger sig självt efter att jag matar in det andra värdet. Skrev ett klassiskt "Hello world!" tidigare där cin.get(); fungerade som det skulle, men det gör inte det här av någon anledning.

Tack på förhand för svar!

Om du skulle köra code::blocks ide så pausar den efter att outputen kommit upp så då slipper man trixa för att få den att stanna uppe.

http://www.codeblocks.org/downloads

/M

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

system("pause");