Zaczynam od Visual C ++ i chciałbym wiedzieć, jak zachować okno konsoli.
Na przykład byłaby to typowa aplikacja „hello world”:
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
Jakiego wiersza mi brakuje?
visual-c++
console
Raúl Roa
źródło
źródło
Odpowiedzi:
Rozpocznij projekt Ctrl+F5zamiast zamiast F5.
Okno konsoli pozostanie otwarte z
Press any key to continue . . .
komunikatem po wyjściu z programu.Pamiętaj, że wymaga to
Console (/SUBSYSTEM:CONSOLE)
opcji linkera, którą możesz włączyć w następujący sposób:CTRL-F5 i wskazówki do podsystemu działają razem; nie są osobnymi opcjami.
(Dzięki uprzejmości DJMorreTX z http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )
źródło
cin.get(),getchar(), system("pause")
ani innych śmieci. Zmiana tego działa.system("pause");
na końcu swojego kodu. Ma to sens i działa dobrze.Standardowy sposób jest
cin.get()
przed zwrotem.źródło
_tmain
. Głosowałbym na kolejne -1cin.get()
zamiast zamiast punktu przerwania dla F5 lub używania Ctrl F5. Ale wolno mi tylko jedna opinia._tmain
? Jest to standardowy sposób pisania aplikacji Windows ukierunkowanej na podsystem konsoli. Odbieganie od tego standardu byłoby złym postępowaniem. Oczywiście nikt nie mówi o przenośnym kodzie; pytanie brzmi Visual C ++ i_tmain
jest sygnaturą, która pojawia się w przykładowym kodzie. Czas porzucić tę religię. Windows jest domyślnie „niestandardowy” i istnieją bardzo dobre powody, aby stosować się do jego standardów._tmain
jest spowodowane tym, że jest to całkowicie niepotrzebne niestandardowe (międzynarodowy standard C ++ wymaga zwykłegomain
) i ponieważ wykorzystujeT
schemat makr Microsoftu , który jest niepotrzebną komplikacją i językiem do obsługi systemu Windows 9x. Jeśli czujesz, że odstępstwo od standardu jest złą praktyką, absolutnie nie powinieneś używaćtmain
. Nie ma dobrych powodów do używaniatmain
, z wyjątkiem trollingu lub, dla profesjonalistów, do wykazania całkowitej niekompetencji.Umieść punkt przerwania na
return
linii.Używasz go w debuggerze, prawda?
źródło
Inną opcją jest użycie
Chociaż nie jest to zbyt przenośne, ponieważ będzie działać tylko w systemie Windows, ale zostanie automatycznie wydrukowane
źródło
system
jest zadeklarowany w<stdlib.h>
.W przypadku projektów makefile zaakceptowane rozwiązanie kończy się niepowodzeniem z powodu błędu w programie Visual Studio (który jest obecny przynajmniej do wersji 2012 - nie testowałem jeszcze 2013). Ten błąd jest szczegółowo opisany tutaj .
Aby zatrzymać konsolę po zakończeniu programu w projekcie makefile, wykonaj następujące kroki (może się to różnić w przypadku wersji innych niż 2010-2012):
1) Przejdź- EDYCJA : patrz poniżej./SUBSYSTEM:CONSOLE
do linkera.2) Otwórz plik projektu (.vcxproj) w edytorze tekstu.
3) Wewnątrz
<project>
znacznika głównego wstaw następujące elementy:4) Załaduj ponownie projekt do swojego rozwiązania.
5) Uruchom program bez debugowania (CTRL + F5).
EDYTOWAĆ:
Zgodnie z moim komentarzem poniżej ustawienie opcji linkera
/SUBSYSTEM:CONSOLE
jest w rzeczywistości nieistotne dla projektów makefile (i niekoniecznie nawet możliwe, jeśli używasz kompilatora innego niż MSVC). Liczy się tylko to, że ustawienie zostanie dodane do pliku .vcxproj, jak w kroku 3 powyżej.źródło
/SUBSYSTEM:CONSOLE
linkerowi jest w rzeczywistości nieistotne - liczy się tylko krok 3. Pamiętaj, że moja odpowiedź dotyczy projektów makefile - w projekcie makefile IDE nie ma sposobu, aby dowiedzieć się, co przekazujesz linkerowi (możesz nawet nie używać kompilatora, który ma/SUBSYSTEM:CONSOLE
opcję), a jest to projekt sam, który śledzi, czy ma być programem konsolowym. Odpowiednio zmienię swoją odpowiedź.Możesz użyć
cin.get();
lubcin.ignore();
tuż przed instrukcją return, aby uniknąć zamknięcia okna konsoli.źródło
po prostu umieść punkt przerwania na ostatnim kręconym nawiasie głównym.
działa dla mnie, nie ma potrzeby uruchamiania bez debugowania. Wykonuje także destruktory przed trafieniem do punktu przerwania, dzięki czemu można sprawdzić wszelkie komunikaty wydrukowane na tych destrukterach, jeśli takie istnieją.
źródło
Po prostu dodaj punkt przerwania do nawiasu zamykającego
_tmain
metody. Jest to łatwiejszy sposób i nie trzeba dodawać kodu w celu debugowania.źródło
Umieść punkt przerwania na końcowym nawiasie klamrowym
main()
. Potknie się nawet przy wielureturn
instrukcjach. Jedynym minusem jest to, że wezwanie doexit()
nie zostanie złapane.Jeśli nie debugujesz, postępuj zgodnie ze wskazówkami zawartymi w odpowiedzi Zoidberga i uruchom program za pomocą Ctrl+ F5zamiast po prostu F5.
źródło
Moje 2 centy:
Wybór 1: Dodaj punkt przerwania na końcu
main()
Wybór 2: Dodaj ten kod, tuż przed
return 0;
:Musisz uwzględnić
<iomanip>
dlastd::numeric_limits
źródło
po prostu dodaj system („pauza”) na końcu kodu, zanim zwróci 0 w ten sposób
źródło
źródło
cin.get()
Lubsystem("PAUSE")
. Nie słyszałem, że możesz użyćreturn(0);
źródło
Dołączam,
#include <conio.h>
a następnie dodajęgetch();
tuż przedreturn 0;
wierszem. Tego i tak nauczyłem się w szkole. Metody wymienione powyżej są zupełnie inne, widzę.źródło
Miałem ten sam problem. Używam
_getch()
tuż przed instrukcją return. To działa.źródło
(Niektóre opcje mogą być wywoływane różnymi nazwami. Nie używam wersji angielskiej)
Miałem ten sam problem, kiedy tworzyłem projekty z opcją „pusty projekt”, Utwórz projekt jako „Aplikacja konsoli Win32” zamiast „pusty projekt”. W wyświetlonym oknie dialogowym naciśniesz „kontynuuj”, a następnie możesz zaznaczyć opcję „pusty projekt” i nacisnąć przycisk potwierdzenia. Następnie CTRL + F5 otworzy konsolę, która nie zamyka się automatycznie.
źródło
Miałem ten sam problem; W mojej aplikacji jest wiele punktów wyjścia () i nie było sposobu, aby wiedzieć, gdzie dokładnie wychodzi, wtedy dowiedziałem się o tym:
lub
W ten sposób przestanie działać bez względu na to, gdzie wyjdziemy z programu.
źródło
atexit
.atexit
przyjmuje wskaźnik funkcji, a nie liczbę całkowitą.Inna opcja:
Głównie:
źródło
W rzeczywistości prawdziwym rozwiązaniem jest wybór samego szablonu projektu. MUSISZ wybrać aplikację konsoli Win32 w starszym VS lub wypełnić najpierw nazwę projektu, a następnie dwukrotnie kliknąć kreatora pulpitu systemu Windows, a następnie wybrać aplikację konsoli Win32. Następnie wybierz pusty projekt w tym momencie. Pozwala to na to, czego naprawdę chciał pierwotny pytający bez dodawania dodatkowego punktu zatrzymania i kodu wstrzymania. Przeszedłem również przez ten problem. Odpowiedź znajduje się również na stronie MSDN.
źródło
Oto sposób na pozostawienie otwartego okna poleceń bez względu na to, jak wykonanie się zatrzymuje bez modyfikowania kodu:
W Visual Studio otwórz Strony właściwości projektu -> Debugowanie .
W polu Command wpisz
$(ComSpec)
W polu Argumenty poleceń wprowadź
/k $(TargetPath)
. Dołącz dowolne argumenty do własnej aplikacji.Teraz F5 lub Ctrl-F5 wykonuje Windows / System32 / cmd.exe w nowym oknie, a / k zapewnia, że wiersz polecenia pozostanie otwarty po zakończeniu wykonywania.
Minusem jest to, że wykonanie nie kończy się na punktach przerwania.
źródło
Jak niektórzy już zauważyli, rozwiązanie Zoidbergs nie dołącza debuggera, czego zwykle nie chcesz.
Najlepszą opcją imo jest odpowiednie skonfigurowanie VS (od VS 2017 r.), Przechodząc do Narzędzia> Opcje> Debugowanie> Ogólne. Tam odznaczasz „Automatycznie zamykaj konsolę po zatrzymaniu debugowania” (na samym dole), co prawdopodobnie jest zaznaczone w twoim przypadku.
źródło
możesz po prostu umieścić keep_window_open (); przed powrotem tutaj jest jeden przykład
źródło