2010-04-14 24 views
8

Próbuję Visual Studio 2010, kompilując program C. Po wyświetleniu rozwiązania w oknie poleceń "DOS" okno zostaje natychmiast zamknięte. W Visual studio 2008, dostaje się komunikat naciśnij dowolny klawisz, aby kontynuować i naciśnięcie klawisza zamyka okno wiersza polecenia. Jak ustawić to zachowanie w 2010 roku?Visual Studio 2010 wychodzące po zakończeniu programu

+1

Nie inaczej jest w VS2010, naciśnięcie Ctrl + F5 wywołuje polecenie "naciśnij dowolny klawisz" po zakończeniu programu. –

+1

Tak, znam skrót do "start bez debugowania", ale w moim przypadku okno konsoli zostanie natychmiast odrzucone. To jest dziwne. – yCalleecharan

Odpowiedz

19

Po trochę googlowania znalazłem rozwiązanie this, które nie wymaga modyfikacji kodu. Zawiera obejście, które obejmuje modyfikowanie pliku .vcxproj.

Aby to zrobić w programie Microsoft Visual C++ 2010 Express (Jestem przy założeniu, że jest podobny do Visual Studio 2010), otwórz projekt i przejdź do następującego menu:

Project->$YOURPROJECTNAME Properties... 
    ->Configuration Properties 
     ->Linker 
      ->System->SubSystem 

następnie użyj listy rozwijanej, aby wybierz opcję Console (/ SUBSYSTEM: CONSOLE) i zastosuj zmianę.

"Rozpocznij bez debugowania" powinien teraz postąpić właściwie.

+0

Cudownie. Działa to bardzo dobrze. I dałem ci także 1 głos do góry. Używam wersji Express. – yCalleecharan

+0

Dziękujemy za zgłoszenie tego błędu tutaj. – yCalleecharan

+0

To działa doskonale dla mnie, dziękuję. Czy istnieje sposób automatycznego zastosowania tego rozwiązania do wszystkich projektów? – petric

2

Jest to normalne. Okno konsoli "DOS" jest dołączone do twojego programu i powinno zakończyć się po zakończeniu twojego programu. Jeśli chcesz, aby pozostała otwarta, musisz dodać kod do swojego programu, aby go otworzyć. Wszystko, co musisz zrobić, to dodać instrukcję print, a następnie wprowadzić instrukcję na końcu programu.

+0

OK dzięki ... kod do akceptacji danych wejściowych z klawiatury. – yCalleecharan

0

Jeśli uruchomisz aplikację bez debuggera ("Rozpocznij bez debugowania"), okno konsoli pozostanie otwarte do momentu naciśnięcia klawisza.

+0

hmmm ... faktycznie to zrobiłem. Wiem, że dotyczy to również Visual Studio 2008, a to "polecenie" jest tym, czego używam do uruchamiania moich programów. Więc byłem nieco zaskoczony tym innym zachowaniem w 2010 roku. – yCalleecharan

+0

Mogę potwierdzić, że użycie "start bez debugowania" w 2010 roku nie powoduje otwarcia okna konsoli po zakończeniu programu. – yCalleecharan

+0

To dziwne. Nie mam tego samego zachowania w moim Visual Studio ... –

0

Możesz dodać tę funkcję i wywołać ją tuż przed powrotem z main():

void keep_window_open() 
{ 
    // clear buffer 
    fflush(stdin); 
    printf("Please enter a character to exit\n"); 
    char ch; 
    ch = getchar(); 
    return; 
} 

ja przystosowane go z C++ w wersji w pliku nagłówkowym narzędzie w miejscu Bjarne Stroustrup za: http://www.stroustrup.com/Programming/std_lib_facilities.h

+0

Wielkie dzięki. Musiałem przenieść linię "char ch" tuż za nawiasem otwierającym {po definicji funkcji, aby uniknąć błędów kompilacji. Myślę, że linia "fflush (stdin)" jest kod C++ i nie działa dobrze w C. – yCalleecharan

+0

Masz rację, zgodnie z c FAQ: http://2-faq.com/stdio/stdinflush. html fflush jest zdefiniowany tylko dla strumieni wyjściowych. Link do tego wpisu w FAQ zawiera informacje o tym, jak wprowadzić dane: http://c-faq.com/stdio/stdinflush2.html – Darel

+0

Dzięki za link. – yCalleecharan

1

FWIW, polecenie "Rozpocznij bez debugowania" działa w VS2010 dokładnie w taki sam sposób jak w poprzednich wersjach Visual Studio (to znaczy, w przypadku projektu konsoli konsola pozostaje otwarta, gdy proces kończy się na "Naciśnij dowolny klawisz, aby kontynuować. ... "prompt).

Więc, w jaki sposób otrzymujesz program VS2010 do uruchomienia programu? Jeśli używasz skrótu "Ctrl-F5", czy możesz sprawdzić, czy Ctrl-F5 jest powiązany z Debug.StartWithoutDebugging w "Opcjach/Środowisko/Klawiatura"?

Możesz także spróbować uruchomić swój program za pomocą menu ("Debugowanie/Rozpocznij bez debugowania")?

+0

Dzięki. Najpierw skompiluję plik, następnie go skompiluję, a następnie używam Debugowania> start bez debugowania. Przypisałem "Ctrl-F5" tak jak mi powiedziałeś, ale mam takie samo zachowanie. Przyznaję, że to dziwne, ponieważ Visual Studio 2005 działa dobrze zgodnie z oczekiwaniami. – yCalleecharan

+0

@yCalleecharan: Interesujące - nie jestem świadomy ustawienia, które to kontroluje. –

+0

Tak, trudno w to dziwne zachowanie. – yCalleecharan

3

Powodem tego jest fakt, że teraz w VS 2010 możliwe jest domyślne utworzenie pustego, ogólnego projektu C++, bez konieczności przechodzenia przez kreatora. To powoduje, że VS 2010 nie ustawi poprawnie flagi Console (/SUBSYSTEM:CONSOLE), więc VS2010 nie ma pojęcia, że ​​jest to aplikacja konsolowa, do której wysyłałby zwykły komunikat "Naciśnij dowolny klawisz ...".

Ten problem nie występuje, jeśli typ projektu aplikacji konsolowej zostanie utworzony z menu Nowy projekt.

Ale możesz ustawić tę flagę samodzielnie i wiele innych za pomocą Project/Settings, ponieważ powyższy post poprawnie odpowiedział!

2

Jeśli chcesz, aby pozostawał otwarty, musisz dodać kod do swojego programu.Podoba mi się:

#include <stdio.h> 
#include <stdlib.h> 

... main(...) 
{ 
    your codes 
     . 
     . 
     . 

    system("pause"); 

} 

jeśli dodasz ten kod, twój czarny ekran pozostanie otwarty. "system (" pause ")" wewnątrz pliku nagłówkowego stdlib.h.

+0

Twoja odpowiedź będzie nieco lepsza, jeśli wyjaśnisz, jak to powinno działać. W obecnej sytuacji jest to tajemnicze zaklęcie, a czytelnik nie uczy się wiele. – dmckee

+0

Dzięki stary .. dobra robota – Lokesh

1

Doprowadzić "Uruchom bez debugowania" do menu Debug ...

Narzędzia >> Dostosuj >> Polecenia (Tab) >> Pasek menu (opcja sterowania) (listy rozwijanej) >> >> Dodaj debugowania Polecenie (przycisk) >> Debugowanie (lista kategorii) >> Rozpocznij bez debugowania

Użycie opcji "Uruchom bez debugowania" Umożliwi urządzeniu VS2010 wyświetlenie frazy "Naciśnij dowolny klawisz, aby kontynuować" przed wyjściem.

Powiązane problemy