Visual C++ debug problem (obs! ej felkodshjälpförfrågan)

Permalänk
Medlem

Visual C++ debug problem (obs! ej felkodshjälpförfrågan)

Jag har nyss börjat lära mig programmera i C++ och hoppas att jag inte kommer behöva er hjälp allt för mycket under sommaren innan jag får lärare att fråga till hösten..

Jag har skrivit av ett program ur ett exempel från boken jag använder som ser ut såhär:

#include <iostream>
using namespace std;

void polly(int);
int main()
{
polly(3);
cout << "Ge mig ett heltal: ";
int count;
cin >> count;
polly(count);
return 0;
}

void polly(int n)

{
cout << "Polly vill ha " << n << " sockerbitar!\n";
}

Problemet som uppstår är att då jag trycker på "start debugging" för att söka efter fel och sedan köra koden så startar programmet som det ska och ser ut såhär:

Polly vill ha 3 sockerbitar!
Ge mig ett heltal:

men då jag trycker in antalet sockerbitar jag vill ge polly och sedan enter så sker allting blixtsnabbt och programmet stängs ner. Det märkliga är nu att då jag istället väljer "Start without debugging" så fungerar som det ska och jag får se hela körningen av programmet innan jag själv får stänga ner det. Alltså:

Polly vill ha 3 sockerbitar!
Ge mig ett heltal:
Polly vill ha X sockerbitar!
Tryck på en valfri tangent för att fortsätta...

Jag ska alltså inte behöva lägga in något cin.get någonstans tror jag, men varför verkar det som att det skulle behövas när jag väljer "Start debugging"?

Jag vet att det här säkert är ett ytterst trivialt problem så säg gärna till mig om jag fortsättningsvis inte ska komma dragandes med sånna här nybörjarfrågor, för annars lär jag fortsätta

Visa signatur

AMD Athlon 64 3k+, ASUS A8N-SLI deluxe, NVIDIA GeForce 6200 TurboCache, Q-TEC PSU 650W, NVIDIA nForce nätverkskort, SB Audigy 2, 2 x 1GB Corsair PC3000 DDR-SDRAM, WD Raptor 36.7GB SATA 8MB 10k RPM och Maxtor 200GB SATA

Permalänk
Hedersmedlem

Det är by design. Du startar upp programmet som körs och när det är färdigt så stängs det. Att start without debugging gav dig "tryck på valfri..." är väl för att VS startar det annorlunda (bat med pause på slutet?).

Du får samma sak om du går till debugmappen i utforskaren och dubbelklickar på filen, det kommer avslutas direkt då inget mer väntar. Öppnar du istället en kommandprompt och navigerar dig fram och kör så kommer det såklart vara kvar efter du kört.
Koden eller debugmiljön är det inga fel på.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Med Ctrl+F5 så blir konsolen kvar när programmet kört klart.

Visa signatur

Legitimerad stofil

Permalänk

Du råkar inte läsa C++ Programmering av Stephen Prata?

Btw, lägg till en cin.get(); precis innan return 0; så väntar den på att du ska trycka enter innan den slutar programmet.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Rusiak
Med Ctrl+F5 så blir konsolen kvar när programmet kört klart.

Grattis...
"Start without debugging" är precis vad Ctrl+F5 kör från debugmenyn. Som han redan upptäckt. Men om han vill köra med debuggning, utan cin.get och köra direkt från VS och ha fönstret kvar. Hur gör man då? Det är ju det intressanta.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Det borde räcka att sätta en Breakpoint på sista raden, eller något liknande.

Visa signatur

Vill du ha svar? Citera mig gärna.

Permalänk
Medlem

Jag har som sagt prövat att slänga in lite cin.get(); överallt i koden, men problemet kvarstår. I det här programmet stötte jag på samma problem:

"#include <iostream>
using namespace std;
int main()
{
int loppor;

cout << "Hur många loppor har din katt?\n"; //Visa frågan
cin >> loppor; //inmatning i C++
//Nästa rad slår ihop utmatningen
cin.get();
cout << "Hm... Det är " << loppor << " loppor för mycket.\n";
cin.get();
return 0;
}"

Men löste det genom att slänga in 2 st cin.get(); före och efter det sista cout satsen som ni ser. Då stängdes inte programmet ner oavsett hur jag valde att starta det (tar jag bort något av dem så kommer felet tillbaka). Men den lösningen fungerade alltså inte i Polly programmet.

Ctrl + F5 gjorde som du sa, Rusiak, att jag fick se hela körningen, men varför får jag det inte när jag först kör debuggern? det måste ju gå på nåt sätt...

Och ja, hagbarddenstore, det är "C++ programmering" av Stephen Prata jag läser

Visa signatur

AMD Athlon 64 3k+, ASUS A8N-SLI deluxe, NVIDIA GeForce 6200 TurboCache, Q-TEC PSU 650W, NVIDIA nForce nätverkskort, SB Audigy 2, 2 x 1GB Corsair PC3000 DDR-SDRAM, WD Raptor 36.7GB SATA 8MB 10k RPM och Maxtor 200GB SATA

Permalänk
Medlem

Lägg in cin.ignore('\n', 1024); innan din cin.get(), det bör fungera.

Permalänk
Medlem

Det gjorde det! tack You. Hoppas det inte tar alltför lång tid innan jag förstår varför det fungerade också

Visa signatur

AMD Athlon 64 3k+, ASUS A8N-SLI deluxe, NVIDIA GeForce 6200 TurboCache, Q-TEC PSU 650W, NVIDIA nForce nätverkskort, SB Audigy 2, 2 x 1GB Corsair PC3000 DDR-SDRAM, WD Raptor 36.7GB SATA 8MB 10k RPM och Maxtor 200GB SATA