c - कंसोल विंडो को विजुअल स्टूडियो सी/सी++ कंसोल एप्लिकेशन पर बंद करने से रोकें




visual-studio console (11)

यह शायद एक शर्मनाक सवाल है क्योंकि इसमें कोई संदेह नहीं है कि जवाब अंधेरे से स्पष्ट है।

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

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

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


(/ सबस्टेस्टम: कंसोल) ने मेरे बनाम2013 के लिए काम नहीं किया (मुझे पहले से ही यह था)।

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

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

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

Qtcreator pre 2.6 में उपयोग किया गया समाधान। अब जबकि क्यूटी बढ़ रही है, बनाम दूसरी तरफ जा रहा है। जैसा कि मुझे याद है, बनाम 2008 में हमें ऐसी चाल की आवश्यकता नहीं थी।


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

गुण> विन्यास गुण> लिंकर> सिस्टम

SubSystem विकल्प में कंसोल (/ सबस्टेस्टम: कंसोल) का चयन करें।

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


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

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

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

पेशेवरों:

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

विपक्ष:

  • कोड को संशोधित करना होगा
  • std :: समाप्त नहीं होगा ()
  • आईडीई / डीबगर सत्र के बाहर आपके कार्यक्रम में अभी भी होगा; आप इसका उपयोग विंडोज के तहत रोक सकते हैं:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}

गोटो डीबग मेनू-> स्टार्टविथआउट डिबगिंग दबाएं


बस कोड की अपनी अंतिम पंक्ति के रूप में डालें:

system("pause");

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

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

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

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

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


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


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

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

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

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

  2. प्रोजेक्ट गुणों को खोलें विन्यास गुण | डिबगिंग।

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

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

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


सी / सी ++ के लिए यहां एक तरीका है:

#include <stdlib.h>

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

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


console.readline प्रयोग करें। आपका लाइन लिख रहा है लेकिन इसे पढ़ नहीं रहा है।


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

#include <iostream>;

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




console