Po kompilacji programów konsoli okno konsoli zamyka się natychmiast po uruchomieniu. Jaka jest najlepsza praktyka, aby ją otworzyć? Szukałem ładunków Google, jestem przyzwyczajony do bloków kodu, w których nie musisz się martwić, ale chcę trochę pomieszać z Visual Studio i przy VS, moja konsola się zamyka. W całej interwebzie istnieje kilka różnych sposobów, aby go otworzyć, jednak przeczytałem, że większość z nich to złe techniki kodowania. Co to jest preferowana metoda Everyones?Jakie są najlepsze praktyki w zwalczaniu problemu zamknięcia konsoli?
Odpowiedz
cin
jest rażąco nieeleganckie, ale łatwe dla zapominalskich czerpać:
{
char c;
std::cin >> c;
}
To trzyma otwarte okno aż wpisywania znaków/* edit */i nacisnąć enter.
std::cin.get()
zamknie okno z chwilą wpisania znaku, co w zależności od tego, jak łatwo się przyzwyczaisz, prowadzi do nieznacznie większego ryzyka "okrzyki, szkoda, że tego nie zamknąłem!" niż dwa naciśnięcia klawisza: operator>>(istream &)
.
Oba różnią się od system("pause")
tym, że zwracają w dostępnym dla programu sposobie wartość wpisanego znaku, więc jeśli nieczęsto zdarza się, że jeden klud prowadzi do drugiego, można napisać instrukcję przełączania na podstawie tego, co wpisałeś na przykład (na przykład) natychmiastowe wyjście, zapisanie pewnych wartości do dziennika, ponowne uruchomienie itd.
Bardzo często wystarczy po prostu wpisać kod, aby odczytać klucz z konsoli po zamknięciu głównego kodu aplikacji . Klucz odczytywany jest po prostu wyrzucany, ale otwiera konsolę.
To nie jest ładne, niekoniecznie - ale często robię to zawijane w definicji debugowania, więc podczas debugowania konsola jest otwarta. Podczas wydawania zwykle nie działa w VS, a po uruchomieniu z wiersza poleceń nie stanowi to już problemu.
Podoba mi się pomysł #define debugowania. zdecydowanie lepszy niż punkt przerwania. – AShelly
Ponieważ zawsze używasz debuggera, ustaw punkt przerwania na instrukcji return z main()
.
Debugger to Twój najlepszy przyjaciel, ucz się (i ucz się wcześniej), aby używać go na swoją korzyść przy każdej okazji.
za każdym razem, gdy to robię, ciągle znajduję się w crt0.c, co jest naprawdę denerwujące. – AShelly
uruchomić program w konsoli, który byłby oczekiwany sposób działa program konsoli ...
Alternatywnie, można zrobić mały plik wsadowy do wykonania swój program, który miałby:
REM batch file to launch program
yourprogram.exe
PAUSE
i polecenie cmd.exe o nazwie PAUSE
poprosi użytkownika o naciśnięcie dowolnego klawisza.
To całkiem proste. Kliknij prawym przyciskiem myszy swój projekt w VS, wybierz Właściwości. W sekcji debugowania można powiedzieć, aby uruchomić program zewnętrzny. W takim przypadku będzie to plik wsadowy, który uruchamia twoją aplikację. –
I mają tendencję do używania system("PAUSE");
co daje Ci wiadomość
Press any key to continue . . .
.
wywołać tę funkcję przed powrotem na koniec główny:
void onEnd()
{
printf("Press any key to exit...");
_getch();
}
Kiedy używam Visual Studio i nie muszę debugowanie I wystarczy uruchomić go za pomocą Ctrl + klawiszy F5 – i zapobiega zamknięciu konsoli.
używam:
cin.get()
usłyszałem to było mniej kosztowne niż systemu ("PAUSE") i działa na systemach POSIX też. Jest świetny link, który zawiera szczegółowe informacje na ten temat.
Co kosztuje wszystko? Cały punkt kodu polega na tym, aby okno terminala było zawieszone do momentu naciśnięcia klawisza. Jak powolny jest twój "system" ("PAUSE") 'w porównaniu z np. Twój refleks ;-) –
Oprzeć się pokusie, aby cokolwiek zrobić. Dobrze zachowane programy wiersza poleceń kończą działanie po zakończeniu pracy, zgłaszając status za pomocą kodu wyjścia. To umożliwia im pisanie skryptów i "dobrych obywateli" w zautomatyzowanych środowiskach. Nawet w interaktywnym środowisku, dlaczego zmusić użytkownika do dodatkowego naciśnięcia klawisza tylko ze względu na środowisko debugowania?
Po uruchomieniu zamiast debugowania program Visual Studio otworzy okna konsoli, które zatrzymają się po wyjściu aplikacji, aby można było nadal wyświetlać dane wyjściowe. Nie wiem, dlaczego zachowanie jest inne podczas debugowania, być może dlatego, że masz dostępne punkty przerwania, więc jeśli chcesz zobaczyć dane wyjściowe na różnych etapach, możesz umieścić punkty przerwania po odpowiednich wyciągach wyjściowych lub pod koniec main
lub włączyć różne opcje "zatrzymaj się przy rzucie wyjątkowym".
Bez względu na przyczynę, nigdy nie czułam się zmuszona do kompromisu w zachowaniu się mojej aplikacji, tylko po to, by poprawić jakość mojego debugowania.
+1 za różnicę w zachowaniu run vs. debug. –
Odpowiedzi "nie rób tego" w tym wątku mogą wydawać się lakoniczne, ale są dość rozsądne. Zdarzyło mi się to pytanie, ponieważ debuguję pakiet gtest, który działał dobrze, ale teraz rozbija się tajemniczo po uruchomieniu. Po uruchomieniu z konsoli pojawia się okno dialogowe z napisem "blah.exe przestał działać"; ale, po uruchomieniu z debuggera, konsola wyskakuje na chwilę, znika, a program wychodzi ze statusem 0.
Powinienem był pomyśleć o tym, jak dziwna była ta różnica w zachowaniu, ale zamiast tego powiedziałem: "Aw, stary - muszę zrobić to okno konsoli, żeby zobaczyć, co mówi". Dobrze?
Okazuje się, że maszyna, nad którą pracuję (moja koleżanka) miała "Argumenty dowodzenia" dla debuggera ustawionego na "--gtest_filter = * testMsg *". Zauważyłem to od razu, ale nigdy nie przyszło mi do głowy, że wszystkie testy pasujące do filtra zostały zmienione w ostatnim zatwierdzeniu. Tak więc, po uruchomieniu z debuggera, program nie znalazł żadnych testów i po prostu wychodził. Kolejne 90 minut mojego życia nigdy nie wrócę. (-_-) Mogłabym rzucić to trochę szybciej, gdyby moja reakcja odruchowa nie była taka, że potrzebuję, aby okno konsoli było otwarte, aby rozwiązać problem ...
- 1. CSS3 - Jakie są najlepsze praktyki dotyczące wydajności?
- 2. nhibernate: jakie są najlepsze praktyki w zakresie wdrażania równości?
- 3. Jakie są najlepsze praktyki dotyczące używania wymagania w Ruby?
- 4. Jakie są najlepsze praktyki w zakresie rejestrowania aplikacji korporacyjnych?
- 5. Jakie są najlepsze praktyki w ramach programu MEF?
- 6. Jakie są najlepsze praktyki w pisaniu procedura przechowywana sql
- 7. Jakie są najlepsze praktyki dla plików we/wy w C?
- 8. Jakie są najlepsze praktyki dotyczące interakcji klient-serwer?
- 9. Jakie są najlepsze/bardziej stabilne funkcje Biblioteki zamknięcia Google
- 10. Jakie są najlepsze praktyki dotyczące używania stref dostępności EC2?
- 11. Jakie są najlepsze praktyki i wskazówki dotyczące organizacji rozwiązania Xcode?
- 12. Jakie są najlepsze praktyki dotyczące oznaczania Docker Hub wersje
- 13. Jakie są najlepsze praktyki zarządzania kontrolą i kontrolą źródła?
- 14. Jakie są najlepsze praktyki używania AngularJS z Django
- 15. CSS Outline najlepsze praktyki
- 16. Najlepsze praktyki modelowania LDAP
- 17. Transakcje NHibernate Najlepsze praktyki
- 18. Najlepsze praktyki wtrysku zależnego
- 19. Najlepsze praktyki ASP.NET Security
- 20. Najlepsze praktyki testowania integracji
- 21. OpenGL vào najlepsze praktyki
- 22. Najlepsze praktyki SQLite na iPhonie
- 23. Zarządzanie migracjami Rails - najlepsze praktyki?
- 24. C#: Najlepsze praktyki Debug.Print
- 25. DTO: najlepsze praktyki
- 26. Jakie jest najlepsze rozwiązanie dla kłopotliwego problemu równoległego?
- 27. Najlepsze praktyki CoreData
- 28. Android strings.xml Najlepsze praktyki?
- 29. Najlepsze praktyki scalania SVN
- 30. Najlepsze praktyki fragmentów
std :: cin.get() ma taki sam efekt i jest krótszy. –
Przechowuje to okno, dopóki nie pojawi się znak. Który nie, dopóki bufor nie zostanie przepłukany (cin jest buforowany). Wymaga to więc od użytkownika naciśnięcia klawisza Enter (lub wpisania wielu znaków i wypełnienia bufora). –
@ robson3.1415, @martin patrz edycja :-) –