2011-06-18 17 views
8

Właśnie zacząłem uczyć się C++ używając C++ Primer Plus, ale mam problem z jednym z przykładów. Tak jak polecono książkę, na końcu dodałem cin.get(), aby zapobiec samemu zamknięciu konsoli. Jednak w tym przypadku nadal jest on zamykany sam, chyba że dodaję dwie instrukcje, których nie rozumiem. Używam programu Visual Studio Express 2010.Dlaczego zamykanie konsol po dodaniu cin.get()?

#include <iostream> 

int main() 
{ 
    int carrots; 

    using namespace std; 
    cout << "How many carrots do you have?" << endl; 
    cin >> carrots; 
    carrots = carrots + 2; 
    cout << "Here are two more. Now you have " << carrots << " carrots."; 
    cin.get(); 
    return 0; 
} 
+0

GetChar(); może pomóc ? –

Odpowiedz

12
cin >> carrots; 

Linia ta zostawia z tyłu nowej linii token w strumieniu wejściowym, który następnie pobiera spożywane przez następny cin.get(). Wystarczy zrobić proste cin.ignore() bezpośrednio przedtem:

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

Ponieważ cin >> carrots nie czyta nowej linii, które należy wpisać po typying liczbę całkowitą, a cin.get() czyta nowalinia lewo w strumieniu wejściowym, a następnie kończy program. Właśnie dlatego konsola się zamyka.

2
cin >> carrots; 

czyta int ale pozostawia przełamane tyłu.

cin.get(); 

odczytuje ten znak, a program się kończy.

1
cin >> carrots; 

Pobiera liczbę całkowitą i opuszcza nową linię po naciśnięciu klawisza Enter.

cin.ignore(); 

Umieść to po uzyskaniu danych wejściowych, aby uniknąć wyjścia konsoli.

Powiązane problemy