Konsol penceresinin Visual Studio C / C ++ Konsol uygulamasında kapanmasını engelleme


464

Bu şüphesiz cevaplayıcı bir sorudur, çünkü şüphesiz cevap körü körüne açıktır.

Visual Studio'yu yıllardır kullandım, ancak bu ilk kez 'Konsol Uygulaması' geliştirmesi yaptım.

Uygulamamı çalıştırdığımda konsol penceresi açılır, program çıktısı görünür ve uygulama çıktıkça pencere kapanır.

Çıktıyı kontrol edene kadar açık tutmanın veya pencere kapandıktan sonra sonuçları görüntülemenin bir yolu var mı?


Monodevelop beklediğinizi yapar.
ctrl-alt-delor

3
Aşağıda çok fazla cevap var, bu yüzden burada bir cevap kopyalarım: VS2017 kullanıyorsanız, Araçlar-> Seçenekler-> Hata Ayıklama-> Konsolu otomatik olarak kapat
jw_

Kabul. Bence VS 2017 ve daha yeni için en iyi cevap chronoxor'un cevabı.
Tüm Öfke

Yanıtlar:


466

Hata ayıklamadan (Ctrl + F5) çalıştırırsanız, varsayılan olarak pencereyi kapatmak için geri dönmenizi ister. Hata ayıklayıcıyı kullanmak istiyorsanız, son satıra bir kesme noktası koymalısınız.


268
C ++ uygulamanız ve Hata Ayıklama Olmadan Çalıştır'a sahipseniz ve konsol penceresi hala kapanıyorsa, Yapılandırma Özellikleri / Bağlayıcı / Sistem altında Alt Sistemi açıkça Konsol olarak ayarlamayı unutmayın. Bu, Alt Sistemi ayarlanmamış bırakan Boş bir Proje ile başlarsanız olabilir.
Trevor Robinson

4
Benim için çalışmadı :( Konsol penceresi hemen açılır ve kapanır, ancak günlük duraklatılır ve F5'e ek
basmayı

40
Doğru yanıt @TrevorRobinson tarafından verilen yanıttır: Yapılandırma özelliklerinin nerede olduğunu bulmakta sorun yaşıyorsanız genişletilmiş sürüm: Visual Studio> Özellikler> Yapılandırma Özellikleri> Bağlayıcı> Sistem, Alt Sistemi olarak değiştir " Console "
PlagueHammer

3
Trevor Robinson haklı. Boş bir proje başlatırsanız ve C ++ öğesi. Görünüm-> Özellik Yöneticisi-> Özellik (İngiliz anahtarı simgesi) -> Yapılandırma'ya gitmeniz gerekir. Özellikler-> Bağlayıcı-> Sistem-> Alt Sistem-> açılır menüden Konsol'u seçin.
en saygıdeğer efendim

10
VS topluluk 2017 üzerinde çalışıyorum. Çalışmıyor ctrl+f5, Propertiessağ tıkladığımda proje yok, ayrıca wrench icongri.
Ketan

232

Projenize sağ tıklayın

Özellikler> Yapılandırma Özellikleri> Bağlayıcı> Sistem

Konsolu Seçin (/ SUBSYSTEM: CONSOLE) içinde SubSystemseçenek veya sadece yazabilirsiniz Konsolu metin alanında!

Şimdi dene ... çalışmalı


Bu benim VS2013 Express için çalıştı, ancak kabul edilen cevap olmadı. Çok garip, kabul edilen cevap geçmişte kullandığım tüm Visual Studio sürümlerinde işe yaradı.
Michael Calvin

9
@MichaelCalvin Bunu ayarladıktan sonra Ctrl + F5 ile koşmanız gerekiyor, bu kicker.
Jonathan Mee

@JonathanMee hala Ctrl + F5 çalıştırdığınızı belirtti. Bu zaten görsel stüdyom 2015'te ayarlanmıştı, bu yüzden ilk cevap en çok yardımcı olan oldu.

Bu gerçekten doğrudur. CTRL+F5Boş bir projeye yeni bir C ++ dosyası eklerseniz tanıdık başarısız olur.
user2023370

Benim için Visual Studio Express 2015'te çalıştım. Teşekkürler.
LHC

44

İşte C / C ++ için bir yol:

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif

Bunu programınızın en üstüne koyun ve eğer bir Windows sisteminde ( #ifdef _WIN32) ise, o zaman adlı bir makro oluşturur WINPAUSE. Programınızın duraklamasını istediğinizde, çağırın WINPAUSE;ve DOS komutunu kullanarak programı duraklatacaktır. Unix / Linux gibi diğer sistemlerde, konsol yine de program çıkışından çıkmamalıdır.


Bu yöntem, Visual C ++ ile çalışmaz (bazı üstbilgiler
eklemezseniz

2
@wmac windows.h üstbilgisini eklemeniz gerekir
Geowil

1
Herhangi bir kütüphane veya ad alanı eklemedim ama doğru çalışıyor, çok teşekkürler.
Halil İbrahim Oymacı

1
Bunu yapma lütfen. pauseKomut Windows özeldir.
firegurafiku

Benim için Visual Studio 2013 Express'te çalıştı. :)
Anirban

32

Hata Ayıklama Menüsüne Git- > StartWithoutDebugging tuşuna basın


C # Geliştirme Ortamı seçilmediği sürece bu VS 2008'de bile bir seçenek değildir. CTRL + F5 olsa da çalışır. Bunu ayrıca Araçlar> Özelleştir aracılığıyla araç çubuğuna bir düğme olarak ekleyebilirsiniz.
perry

Birden fazla projeniz varsa, ilgili projeyi başlangıç ​​projesi olarak ayarlayın
CAD,

27

.NET kullanıyorsanız Console.ReadLine(), programın sonundan önce koyun .

Bekleyecek <ENTER>.


9
+1 - Ya bu ya da Console.ReadKey()herhangi bir anahtarı beklemek.
Fredrik Mörk

Tuhaf, bunun benim uygulamamda hiçbir etkisi yok. Hala kullanıcı girdisini beklemeden kapanır.
15'te Kokodoko

4
Ardından, kodunuz bu noktaya gelmeden önce büyük olasılıkla çıkar.
Gerçekten

20

Visual Studio 2017'den (15.9.4) itibaren bir seçenek vardır:

Tools->Options->Debugging->Automatically close the console

Visual Studio belgelerindeki karşılık gelen parça :

Hata ayıklama durduğunda konsolu otomatik olarak kapatın:

Visual Studio'ya hata ayıklama oturumu sonunda konsolu kapatmasını söyler.


2
Bunu VS2017 ve VS2019'da test ettim. Hem alt sistemin CONSOLE olarak ayarlanmasını hem de bu seçeneğin kapatılmasını gerektirir. Birine ya da diğerine sahip olmak ya da hiçbirini pencereyi otomatik olarak kapatmaz.
Casey

Aynı çözümden birden fazla proje başlatırsam bu pencereyi hala kapatıyor.
Serge Rogatch

Bu VS 2017 ve ileri için doğru cevap gibi hissediyorum. Eski sürümlerde çok kötü.
Tüm Öfke

13

dönmeden getchar()hemen önce aramayı deneyin main().


Basit bir Hello Name konsol uygulaması için VS 2008'de çalışmaz. cout, cin, cout, getchar (), konsol hala kapanıyor. Anlaşma ne?
perry

1
Getchar () 'dan hemen önce bir eşiniz varsa getchar ()' ı iki kez koymayı deneyin. getchar () bir karakter bekliyor ve zaten cout ile veriyorsun ... Bu yardımcı olursa bana bildirin :)
Magarusu

12

(/ SUBSYSTEM: CONSOLE) vs2013'üm için çalışmadı (zaten vardı).

Hata ayıklama ve çıktı görmek arasında geçiş yapmak istemediğim için "hata ayıklama olmadan çalıştır" bir seçenek değildir.

İle bitirdim

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

Qtcreator pre 2.6'da kullanılan çözüm. Şimdi qt büyürken, vs başka yöne gidiyor. Hatırladığım kadarıyla, vs2008'de böyle numaralara ihtiyacımız yoktu.


7

Burada (1) herhangi bir kod değişikliği veya kesme noktası gerektirmeyen ve (2) program sonlandırıldıktan sonra duraklatılan ve böylece yazdırılan her şeyi görebileceğiniz bir çözüm bulunmaktadır . F5 veya Ctrl + F5'ten sonra duraklar. En büyük dezavantajı, VS2013 Express'te (test edildiği gibi) semboller yüklememesi, bu nedenle hata ayıklamanın çok kısıtlı olmasıdır.

  1. Bir toplu iş dosyası oluşturun. runthenpause.batAşağıdaki içeriği ile mayın dedim :

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause

    İlk satır, sağladığınız komutu ve en fazla sekiz bağımsız değişkeni çalıştıracaktır. İkinci satır duracak.

  2. Proje özelliklerini açın | Yapılandırma özellikleri | Hata ayıklama.

  3. "Komut Bağımsız Değişkenleri" ni $(TargetPath)(veya "Komut" da bulunanları) olarak değiştirin.
  4. "Komut" u tam yol olarak değiştirin runthenpause.bat.
  5. Tamam'ı tıklayın.

Şimdi, çalıştırdığınızda, runthenpause.batuygulamanızı başlatır ve uygulamanız sona erdikten sonra konsol çıktısını görmeniz için duraklar.

Sembollerin nasıl yükleneceğini anlarsam bir güncelleme gönderirim. Denedim /Z7başına bu ancak başarılı olamadı.


1
Bu hala hata ayıklamayı desteklemez, ancak en azından diğer tüm cevapların aksine örneğin VLD çıktısını görememe sorununu ele alır .
Martin Hennings


3

Yürütülebilir dosyayı bir komut isteminden çalıştırabilirsiniz. Bu şekilde tüm çıktıları görebilirsiniz. Veya böyle bir şey yapabilirsiniz:

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

ve bu şekilde adeğişken için veri girene kadar pencere kapanmaz .


3

ekle “| pause ”komutunu proje özelliklerinde hata ayıklama bölümü altında bulabilirsiniz.


4
Çalışırsa bu harika bir çözüm olurdu. pauseyalnızca toplu iş dosyalarında çalışıyor gibi görünür ve STDIN'deki programınızdan girdi alırken bu metni yeniden yazdırmaz. Ben yerine çalıştı |ile &&, ancak hiçbir etkisi vardı - bir komut kabuğu (cmd.exe) yürütme değil muhtemelen çünkü.
Brian Vandenberg

3

Harici bir komut satırı penceresinde açmak için CNTRL + F5 tuşlarına basın (Visual Studio'nun üzerinde kontrolü yoktur).

Bu işe yaramazsa, kodunuzun sonuna aşağıdakileri ekleyin:

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Bu, kod sona erdiğinde terminal penceresini kapatmak için bir tuşa basmanızı bekler.

Bunu birden çok yerde yapmak istiyorsanız, yukarıdaki kodu bir yönteme (örn. private void Pause()) Pause()Koyun ve bir program olası bir sona ulaştığında arayın .


cntrl + f5 yaptığımda açılır sonra hemen kapanır? bunu nasıl düzeltirsin?
Callat

İkinci çözüm aradığım şeydi!
RoG

Ctrl + F5 tuşlarına bastığımda hiçbir şey olmuyor. Benim için çalışırdı ama aniden çalışmayı bıraktı.
Natasha

2

Biraz daha iyi bir çözüm:

atexit([] { system("PAUSE"); });

programınızın başında.

Artıları:

  • std :: exit () kullanabilir
  • anadan birden fazla geri dönüş olabilir
  • programınızı hata ayıklayıcı altında çalıştırabilirsiniz
  • IDE bağımsız ( cin.sync(); cin.ignore();yerine hile kullanıyorsanız + OS bağımsız system("pause");)

Eksileri:

  • kodu değiştirmek zorunda
  • std :: terminate () üzerinde duraklamayacak
  • programınızda IDE / hata ayıklayıcı oturumu dışında da devam edecek; aşağıdakileri kullanarak Windows altında bunu önleyebilirsiniz:

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}

Çok kötü tavsiye.
Şerefe ve s. - Alf

Nedenini açıklayabilir misin?
GhassanPL

Birinin hata ayıklamadığı durumda, yararlı bir şey yapmaz, çünkü bu durumda çözülmesi gereken bir sorun yoktur. VS'de programı sadece Ctrl + F5 ile çalıştırın ve hepsi bu kadar, bu yüzden VS'de bir sorun yok ve bir komut yorumlayıcısında sorun yok, kısacası sorun yok. Ve bir hata ayıklama ve durdurma istediği durumda, eklenen kod durdurmak için bir kesme noktasından daha uygun bir çözüm değildir ve durmak istemeyen durumlarda müdahale eder.
Şerefe ve s. - Alf

2

Her ikisini de kullanın:

  1. cin.get();

veya

  1. system("pause");

Bunlardan birini main()işlevin sonunda ve returnifadeden önce yaptığınızdan emin olun .


2

Bu seçeneği de kullanabilirsiniz

#include <conio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
   .
   .
   .
   getch(); 

   return 0;
}

2

Benim durumumda, VS 2017 topluluk sürümünde bir Boş C ++ projesi oluşturduğumda bunu yaşadım. Alt Sistemi Yapılandırma Özellikleri altında "Konsol (/ SUBSYSTEM: CONSOLE)" olarak ayarlamanız gerekir.

  1. "Görünüm" e gidin ve "Mülk Yöneticisi" ni seçin
  2. Projeye / çözüme sağ tıklayın ve "Mülk" ü seçin. Bu bir Test özelliği sayfası açar
  3. Bağlayıcıya gidin, ardından "Sistem" i seçin
  4. "Alt Sistem" i tıklayın, bir açılır menü görünür
  5. "Konsol (/ SUBSYSTEM: CONSOLE)" seçeneğini seçin
  6. Uygula ve kaydet
  7. Kodunuzu "CTRL + F5" ile bir sonraki çalıştırışınızda çıktıyı görmelisiniz.

0

Visual Studio 2015 , içe aktarılmış . Çünkü kod örnekleri gerekli ithalatı vermediğinde nefret ediyorum.

#include <iostream>;

int main()
{
    getchar();
    return 0;
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.