Visual Studio C / C ++ कंसोल एप्लिकेशन पर बंद करने से कंसोल विंडो को रोकना


464

यह शायद एक शर्मनाक सवाल है क्योंकि इसमें कोई संदेह नहीं है कि उत्तर स्पष्ट रूप से स्पष्ट है।

मैंने वर्षों तक विज़ुअल स्टूडियो का उपयोग किया है, लेकिन यह पहली बार है जब मैंने कोई 'कंसोल एप्लिकेशन' विकास किया है।

जब मैं अपना एप्लिकेशन कंसोल विंडो पॉप अप करता हूं, तो प्रोग्राम आउटपुट दिखाई देता है और फिर एप्लिकेशन से बाहर निकलते ही विंडो बंद हो जाती है।

जब तक मैंने आउटपुट को चेक नहीं किया है, तब तक या तो इसे खुला रखने का कोई तरीका है या विंडो बंद होने के बाद परिणाम देखें?


मोनोडवल्यूड वह करता है जो आप उम्मीद कर रहे हैं।
ctrl-alt-delor

3
नीचे बहुत सारे उत्तर हैं इसलिए मैं यहां एक उत्तर की प्रतिलिपि बनाता हूं: यदि आप VS2017 का उपयोग कर रहे हैं, तो उपकरण-> विकल्प->
डिबगिंग-

माना। मुझे लगता है कि वीएस 2017 के लिए सबसे अच्छा जवाब और नया क्रोनोक्सर द्वारा एक है।
सभी क्रोध

जवाबों:


466

यदि आप डिबगिंग (Ctrl + F5) के बिना चलाते हैं, तो डिफ़ॉल्ट रूप से यह विंडो को बंद करने के लिए आपके प्रेस को वापस लाने का संकेत देता है। यदि आप डिबगर का उपयोग करना चाहते हैं, तो आपको अंतिम पंक्ति पर एक ब्रेकपॉइंट लगाना चाहिए।


268
यदि आपके पास C ++ एप्लिकेशन और रन विथ डेबगिंग है और कंसोल विंडो अभी भी बंद है, तो आपको कॉन्फ़िगरेशन गुण / लिंकर / सिस्टम के तहत सबसिस्टम को कंसोल पर स्पष्ट रूप से सेट करने के लिए याद रखना होगा। यह तब हो सकता है जब आप एक खाली प्रोजेक्ट के साथ शुरू करते हैं, जो सबसिस्टम को परेशान करता है।
ट्रेवर रॉबिन्सन

4
मेरे लिए काम नहीं किया :( कंसोल विंडो खुलती है और तुरंत बन्द हो जाती है, लेकिन लॉग पॉज़ करता है और F5 के अतिरिक्त प्रेस की प्रतीक्षा करता है
CodyBugstein

40
सही उत्तर @TrevorRobinson द्वारा दिया गया है: यहां विस्तृत संस्करण है यदि आपको यह पता लगाने में दिक्कत है कि कॉन्फ़िगरेशन गुण कहां हैं: विजुअल स्टूडियो में अपने प्रोजेक्ट पर राइट-क्लिक करें> गुण> कॉन्फ़िगरेशन गुण> लिंकर> सिस्टम, सबसिस्टम को " कंसोल ”
प्लेगहैमर

3
ट्रेवर रॉबिन्सन सही है। यदि आप कोई रिक्त प्रोजेक्ट प्रारंभ करते हैं, और C ++ आइटम। आपको व्यू-> प्रॉपर्टी मैनेजर-> प्रॉपर्टी (रिंच आइकन) -> कॉन्फिगरेशन में जाना होगा। गुण-> लिंकर-> सिस्टम-> सबसिस्टम-> पॉप-डाउन मेनू में, कंसोल चुनें।
सबसे आदरणीय महोदय

10
Im VS VS 2017 पर काम कर रहा है। ctrl+f5काम नहीं कर रहा है, ऐसा कोई नहीं है Propertiesजब मैं राइट क्लिक प्रोजेक्ट करता हूं, यह भी wrench iconसमझ में आ गया है।
केतन

232

अपने प्रोजेक्ट पर राइट क्लिक करें

गुण> विन्यास गुण> लिंकर> प्रणाली

चुनते हैं SubSystemविकल्प में कंसोल (/ SUBSYSTEM: CONSOLE) का या आप पाठ क्षेत्र में कंसोल टाइप कर सकते हैं !

अब इसे आज़माएं ... यह काम करना चाहिए


इसने मेरे VS2013 एक्सप्रेस के लिए काम किया, लेकिन स्वीकृत उत्तर नहीं दिया। बहुत अजीब बात है, क्योंकि स्वीकृत उत्तर ने सभी विज़ुअल स्टूडियो संस्करणों के लिए काम किया है जो मैंने अतीत में उपयोग किए हैं।
माइकल केल्विन

9
@MichaelCalvin आपको इसे सेट करने के बाद Ctrl + F5 के साथ चलना होगा, यह किकर है।
जोनाथन मे

जैसा कि @JonathanMee ने कहा कि आपने अभी भी Ctrl + F5 चलाया है। यह मेरे दृश्य स्टूडियो 2015 में पहले से ही सेट था, इसलिए पहला उत्तर वह था जिसने सबसे अधिक मदद की।

यह वास्तव में सही है। परिचित CTRL+F5विफल हो जाएगा यदि आप कहते हैं, एक खाली प्रोजेक्ट में एक नई C ++ फ़ाइल जोड़ें।
user2023370

विजुअल स्टूडियो एक्सप्रेस 2015 पर मेरे लिए काम किया। धन्यवाद।
LHC

44

यहाँ C / C ++ के लिए एक तरीका है:

#include <stdlib.h>

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

इसे अपने कार्यक्रम के शीर्ष पर रखें, और यदि यह विंडोज सिस्टम ( #ifdef _WIN32) पर है, तो यह एक मैक्रो नाम से बनाएगा WINPAUSE। जब भी आप अपने कार्यक्रम को रोकना चाहते हैं, तो कॉल करें WINPAUSE;और यह डॉस कमांड का उपयोग करके कार्यक्रम को रोक देगा। यूनिक्स / लिनक्स जैसी अन्य प्रणालियों के लिए, कंसोल को प्रोग्राम से बाहर निकलने पर वैसे भी नहीं छोड़ना चाहिए।


यह विधि विजुअल C ++ में काम नहीं करती है (जब तक कि आप कुछ हेडर शामिल नहीं करते हैं?)
wmac

2
@wmac आपको windows.h हैडर
Geowil

1
मैंने किसी भी पुस्तकालय या नाम स्थान को शामिल नहीं किया, लेकिन यह सही ढंग से चलता है, बहुत बहुत धन्यवाद।
हलील imब्राहिम ओइमैक

1
कृपया ऐसा मत करो। pauseआदेश विंडोज-विशिष्ट है।
फायरगुरफिकु

विजुअल स्टूडियो 2013 एक्सप्रेस पर मेरे लिए काम किया। :)
अनिर्बान

32

गोटो डिबग मेनू-> StartWithoutDebugging दबाएं


यह वीएस 2008 में भी एक विकल्प नहीं है जब तक कि सी # विकास पर्यावरण नहीं चुना गया था। CTRL + F5 हालांकि काम करता है। आप टूल> कस्टमाइज़ के माध्यम से इसे टूलबार के बटन के रूप में भी जोड़ सकते हैं।
पेरी

यदि आपके पास कई प्रोजेक्ट्स हैं तो संबंधित को स्टार्टअप प्रोजेक्ट के रूप में सेट करें
CAD

27

यदि आप .NET का उपयोग कर रहे हैं, Console.ReadLine()तो प्रोग्राम के अंत से पहले रखें।

इसका इंतजार रहेगा <ENTER>


9
+1 - या तो Console.ReadKey()किसी कुंजी की प्रतीक्षा करने के लिए।
फ्रेड्रिक मोर्क

अजीब, मेरे ऐप में इसका कोई प्रभाव नहीं है। यह अभी भी उपयोगकर्ता इनपुट की प्रतीक्षा किए बिना बंद हो जाता है।
कोकोडोको

4
तब आपका कोड उस बिंदु तक पहुंचने से पहले सबसे अधिक संभावना है।
दरअसल

20

Visual Studio 2017 (15.9.4) से प्रारंभ करना एक विकल्प है:

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

विज़ुअल स्टूडियो प्रलेखन से संबंधित अंश :

डिबगिंग बंद होने पर कंसोल को स्वचालित रूप से बंद करें:

डीबगिंग सत्र के अंत में कंसोल को बंद करने के लिए Visual Studio बताता है।


2
मैंने अभी वीएस २०१ VS और वीएस २०१ ९ में यह परीक्षण किया है। इसके लिए सबसिस्टम को CONSOLE में सेट करने और इस विकल्प को बंद करने की आवश्यकता है। एक या दूसरे होने या न तो खिड़की स्वचालित रूप से बंद कर देता है।
केसी

यह अभी भी मेरे लिए खिड़की बंद कर देता है अगर मैं एक ही समाधान से कई प्रोजेक्ट लॉन्च करता हूं।
सर्ज रोजैग

मुझे ऐसा लगता है कि यह वीएस 2017 और आगे के लिए सही उत्तर है। बहुत बुरा यह पुराने संस्करणों में नहीं है।
सभी क्रोध

13

रिटर्न getchar()से पहले सही कॉल करने का प्रयास करें main()


वीएस 2008 में एक साधारण हैलो नाम कंसोल ऐप के लिए काम नहीं करता है। cout, cin, cout, getchar (), कंसोल अभी भी बंद है। क्या बात है?
पेरी

1
यदि आप getchar से पहले एक cout है तो दो बार getchar () लगाने का प्रयास करें। getchar () एक char की अपेक्षा करता है और आप पहले से ही इसे cout के साथ दे रहे हैं ... मुझे बताएं कि क्या यह मदद करता है :)
मगरुसु

12

(/ SUBSYSTEM: CONSOLE) ने मेरे vs2013 के लिए काम नहीं किया (मेरे पास पहले से ही था)।

"रनिंग विदाउट डिबगिंग" एक विकल्प नहीं है, क्योंकि मैं डिबगिंग और आउटपुट देखने के बीच स्विच नहीं करना चाहता।

मैं के साथ समाप्त हुआ

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

समाधान 2.6 qtcreator में इस्तेमाल किया। अब जबकि क्यूटी बढ़ रहा है, बनाम अन्य तरीके से जा रहा है। जैसा कि मुझे याद है, vs2008 में हमें ऐसी ट्रिक की जरूरत नहीं थी।


7

यहां एक समाधान है कि (1) किसी भी कोड परिवर्तन या ब्रेकप्वाइंट की आवश्यकता नहीं है, और (2) कार्यक्रम समाप्ति के बाद रुक जाता है ताकि आप वह सब कुछ देख सकें जो मुद्रित किया गया था। यह F5 या Ctrl + F5 के बाद रुक जाएगा। प्रमुख पहलू यह है कि VS2013 एक्सप्रेस (परीक्षण के अनुसार) पर, यह प्रतीकों को लोड नहीं करता है, इसलिए डिबगिंग बहुत प्रतिबंधित है।

  1. एक बैच फ़ाइल बनाएँ। मैंने runthenpause.batनिम्नलिखित सामग्री के साथ मेरा नाम पुकारा :

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

    पहली पंक्ति जो भी आदेश प्रदान करेगी और आठ तर्कों तक चलेगी। दूसरी पंक्ति होगी ... विराम।

  2. परियोजना गुण खोलें | कॉन्फ़िगरेशन गुण | डिबगिंग।

  3. "कमांड तर्क" को $(TargetPath)(या "कमांड" में जो कुछ भी है) बदलें ।
  4. "कमांड" को पूर्ण पथ में बदलें runthenpause.bat
  5. ठीक है मारो।

अब, जब आप दौड़ते हैं, runthenpause.batतो आपके एप्लिकेशन को लॉन्च करेगा, और आपके आवेदन के समाप्त होने के बाद, आप कंसोल आउटपुट को देखने के लिए रुकेंगे।

मैं एक अपडेट पोस्ट करूंगा अगर मैं यह पता लगाऊंगा कि प्रतीकों को कैसे लोड किया जाए। मैंने कोशिश की /Z7प्रति इस लेकिन सफलता नहीं मिली।


1
यह अभी भी डिबगिंग का समर्थन नहीं करता है, लेकिन कम से कम यह अन्य सभी उत्तरों के विपरीत, आउटपुट जैसे वीएलडी को देखने में सक्षम नहीं होने के मुद्दे को संबोधित करता है।
मार्टिन हेनिंग

6

अपनी अंतिम पंक्ति के रूप में रखें:

system("pause");

3

आप अपने निष्पादन योग्य को कमांड प्रॉम्प्ट से चला सकते हैं। इस तरह आप सभी आउटपुट देख सकते हैं। या, आप ऐसा कुछ कर सकते हैं:

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

return YOUR_MAIN_CODE;

और इस तरह से विंडो तब तक बंद नहीं होगी जब तक आप aवैरिएबल के लिए डेटा दर्ज नहीं करते ।


3

जोड़ें ”| प्रोजेक्ट प्रॉपर्टीज में डिबगिंग सेक्शन के तहत कमांड दलील बॉक्स में रोकें।


4
अगर यह काम करता है तो यह एक महान समाधान होगा। pauseकेवल बैच फ़ाइलों में काम करने के लिए प्रकट होता है, और जब यह STDIN पर आपके प्रोग्राम से इनपुट प्राप्त करता है, तो यह उस पाठ को फिर से प्रिंट नहीं करता है। मैं के |साथ बदलने की कोशिश की &&, लेकिन इसका कोई प्रभाव नहीं था - संभवतः क्योंकि यह कमांड शेल (cmd.exe) के साथ निष्पादित नहीं हो रहा है।
ब्रायन वैंडेनबर्ग

3

बस इसे एक बाहरी कमांड लाइन विंडो में खोलने के लिए CNTRL + F5 दबाएं (विजुअल स्टूडियो का इस पर नियंत्रण नहीं है)।

यदि यह काम नहीं करता है तो अपने कोड के अंत में निम्नलिखित जोड़ें:

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

कोड समाप्त होने के बाद टर्मिनल विंडो को बंद करने के लिए एक कुंजी दबाने के लिए यह प्रतीक्षा करें।

यदि आप इसे कई स्थानों पर करना चाहते हैं, तो उपरोक्त कोड को एक विधि (जैसे private void Pause()) में रखें और Pause()जब भी कोई कार्यक्रम संभावित अंत तक पहुँचे तो कॉल करें ।


जब मैं cntrl + f5 करता है तो यह तुरंत बंद हो जाता है? आप इसे कैसे ठीक करते हैं?
कालट

दूसरा उपाय वह था जिसकी मुझे तलाश थी!
RoG

जब मैंने Ctrl + F5 मारा, तो कुछ नहीं हुआ। यह मेरे लिए काम करता था लेकिन अचानक से, इसने काम करना बंद कर दिया।
नताशा

2

एक बेहतर समाधान:

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

अपने कार्यक्रम की शुरुआत में।

पेशेवरों:

  • std :: exit का उपयोग कर सकते हैं ()
  • मुख्य से कई लाभ हो सकते हैं
  • आप डिबगर के तहत अपना प्रोग्राम चला सकते हैं
  • आईडीई स्वतंत्र (+ यदि आप cin.sync(); cin.ignore();इसके बजाय चाल का उपयोग करते हैं तो स्वतंत्र system("pause");)

विपक्ष:

  • कोड को संशोधित करना होगा
  • std पर विराम नहीं लगेगा :: समाप्त ()
  • आईडीई / डिबगर सत्र के बाहर आपके कार्यक्रम में अभी भी होगा; आप इसका उपयोग करके विंडोज के तहत इसे रोक सकते हैं:

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

बहुत बुरी सलाह।
चीयर्स एंड हीथ। - अल्फ

क्या आप विस्तार से बता सकते हैं कि क्यों?
घाससैनपाल

उस मामले में जहां कोई डिबगिंग नहीं कर रहा है, यह उपयोगी नहीं है, क्योंकि इस मामले में हल करने के लिए कोई समस्या नहीं है। वीएस में सिर्फ Ctrl + F5 के साथ प्रोग्राम चलाएं और यही है, इसलिए वीएस में कोई समस्या नहीं है, और एक कमांड दुभाषिया में कोई समस्या नहीं है, संक्षेप में, कोई समस्या नहीं है। और उस मामले में जहां कोई डिबगिंग कर रहा है और एक स्टॉप जोड़ा कोड को रोकना चाहता है, ब्रेकपॉइंट की तुलना में अधिक सुविधाजनक समाधान नहीं है, और उन स्थितियों में हस्तक्षेप करता है जहां कोई स्टॉप नहीं चाहता है।
चीयर्स एंड हीथ। - अल्फ

2

या तो उपयोग करें:

  1. cin.get();

या

  1. system("pause");

main()फ़ंक्शन के अंत में और returnकथन से पहले दोनों में से एक को सुनिश्चित करें ।



2

मेरे मामले में, मुझे यह अनुभव हुआ जब मैंने वीएस 2017 समुदाय संस्करण पर एक खाली सी ++ प्रोजेक्ट बनाया। आपको कॉन्फ़िगरेशन गुणों के तहत सबसिस्टम को "कंसोल (/ SUBSYSTEM: CONSOLE)" पर सेट करना होगा।

  1. "देखें" पर जाएं फिर "संपत्ति प्रबंधक" चुनें
  2. प्रोजेक्ट / समाधान पर राइट क्लिक करें और "संपत्ति" चुनें। यह एक परीक्षण गुण पृष्ठ खोलता है
  3. लिंकर पर नेविगेट करें फिर "सिस्टम" चुनें
  4. "सबसिस्टम" पर क्लिक करें और एक ड्रॉप डाउन दिखाई देता है
  5. "कंसोल (/ SUBSYSTEM: CONSOLE)" चुनें
  6. लागू करें और सहेजें
  7. अगली बार जब आप "CTRL + F5" के साथ अपना कोड चलाते हैं, तो आपको आउटपुट देखना चाहिए।

0

आयात के साथ विजुअल स्टूडियो 2015 । क्योंकि मुझे नफरत है जब कोड उदाहरण आवश्यक आयात नहीं देते हैं।

#include <iostream>;

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.