दिलचस्प पोस्ट
ट्विटर बूटस्ट्रैप एकाधिक मोडल त्रुटि MongoDB के लिए रैम में "कार्य सेट" को फिट करने का क्या अर्थ है? गतिशील रूप से बूटस्ट्रैप के 'पॉपओवर' कंटेनर को एक क्लास जोड़ें जावास्क्रिप्ट का उपयोग कर स्ट्रिंग के अंतिम अक्षर कैसे प्राप्त कर सकते हैं I मैं कस्टम OpenSSL के साथ पायथन 3.4 कैसे संकलित करूं? Git प्रतिबद्ध है कि git दोष में मूल लेखकों को ओवरराइड नहीं करता है एजेक्स सफलता कॉलबैक फ़ंक्शन के अंदर $ (इस) तक कैसे पहुंचें एंड्रॉइड चेक इंटरनेट कनेक्शन जावा कम्पाइलर के लिए एक त्रुटि एक उदाहरण के रूप में एक स्थिर विधि क्यों नहीं बुला रही है? पायथन में फिर से फाइल खोजने के लिए एक ग्लोब () का प्रयोग करें? सीएसएस मीडिया क्वेरीज़ (स्क्रॉलबार) के साथ जारी करें मैं C ++ में अतिरिक्त लाइब्रेरी कैसे जोड़ूं? अजगर: एक प्रोजेक कथन में प्रिंट आउटपुट प्राप्त करें छवि में किसी विशेष रंग को कैसे बदलना है? रूट के साथ ASP.Net MVC हैंडलिंग सेगमेंट

प्रणाली ( "थामने"); – यह गलत क्यों है?

यहाँ एक सवाल है जो मुझे काफी समझ में नहीं आता है:

कमांड, system("pause"); प्रोग्राम को रोकने के लिए और जारी रखने के लिए एक कीबोर्ड इनपुट के लिए प्रतीक्षा करने के लिए नए प्रोग्रामर को सिखाया जाता है हालांकि, ऐसा लगता है कि बहुत से अनुभवी प्रोग्रामर ने ऐसा कुछ किया है जो अलग-अलग डिग्री में नहीं किया जाना चाहिए।

कुछ लोगों का कहना है कि इसका प्रयोग करना ठीक है। कुछ लोग कहते हैं कि जब आप अपने कमरे में बंद हैं और कोई भी देख नहीं रहा है तो इसका इस्तेमाल किया जाना है। कुछ लोग कहते हैं कि वे व्यक्तिगत रूप से आपके घर आएंगे और आप को मार देंगे यदि आप इसका इस्तेमाल करते हैं

मैं, मैं एक नया प्रोग्रामर हूँ जो कोई औपचारिक प्रोग्रामिंग प्रशिक्षण नहीं है। मैं इसका इस्तेमाल करता हूं क्योंकि मुझे इसे इस्तेमाल करने के लिए सिखाया गया था मुझे जो समझ में नहीं आता है कि अगर यह प्रयोग करने के लिए कुछ नहीं है, तो मुझे इसका इस्तेमाल करने के लिए क्यों सिखाया गया? या, फ्लिप की तरफ, क्या यह सचमुच बुरा नहीं है?

इस विषय पर आपके क्या विचार हैं?

Solutions Collecting From Web of "प्रणाली ( "थामने"); – यह गलत क्यों है?"

यह पर frowned है क्योंकि यह एक मंच विशेष हैक है कि वास्तव में प्रोग्रामिंग सीखने के साथ कोई लेना देना नहीं है, लेकिन बजाय आईडीई / ओएस की एक सुविधा के आसपास पाने के लिए – दृश्य स्टूडियो से शुरू कंसोल विंडो बंद कर देता है जब प्रोग्राम निष्पादन समाप्त हो गया है, और नए उपयोगकर्ता को अपने नए कार्यक्रम के आउटपुट को देखने नहीं मिलता है।

सिस्टम में बोडिंग ("पॉज़") विंडोज कमांड लाइन "पॉज़" प्रोग्राम चलाता है और कार्यक्रम की क्रियान्वयन से पहले समाप्त करने के लिए प्रतीक्षा करता है – कंसोल विंडो खुली रहती है ताकि आप आउटपुट को पढ़ सकें।

एक बेहतर विचार अंत में एक ब्रेकपॉइंट रखना और उसे डिबग करना होगा, लेकिन फिर से समस्याएं हैं।

ये धीमा है। यह प्लेटफ़ॉर्म निर्भर है यह असुरक्षित है

सबसे पहले: यह क्या करता है कॉलिंग "सिस्टम" वाकई खिड़कियों कमांड प्रॉम्प्ट में एक कमांड टाइप करना है। इस तरह के एक कॉल करने के लिए आपके आवेदन के लिए सेटअप और टीडाउन का एक टन है – और ओवरहेड बस हास्यास्पद है

क्या होगा यदि "पॉज़" नामक प्रोग्राम को उपयोगकर्ता के पाथ में रखा गया था? बस कॉलिंग सिस्टम ("पॉज़") केवल गारंटी देता है कि "पॉज़" नामक एक प्रोग्राम को निष्पादित किया जाता है (आशा है कि आपके पास "पॉज़" नामक आपका एक्जीक्यूटिव नहीं है!)

अपनी खुद की "पॉज़ ()" फ़ंक्शन लिखें जो _getch का उपयोग करता है ठीक है, सुनिश्चित करें कि, _getch प्लेटफ़ॉर्म पर निर्भर है (नोट: यह "conio.h" में परिभाषित है) – लेकिन यह system() से बहुत अच्छा है यदि आप Windows पर विकसित कर रहे हैं और इसका एक ही प्रभाव है (हालांकि यह आपकी ज़िम्मेदारी है सीओएटी या ऐसा पाठ प्रदान करें)

असल में: जब आप बस दो लाइनों को जोड़ सकते हैं तो कई संभावित समस्याओं का परिचय दे सकता है और इसमें एक बहुत अधिक लचीला तंत्र शामिल है?

  • धीमा: इसे बहुत से अनावश्यक विंडोज कोड और सरल ऑपरेशन के लिए एक अलग कार्यक्रम के माध्यम से कूदना है
  • पोर्टेबल नहीं: पॉज़ प्रोग्राम पर निर्भर
  • अच्छी शैली नहीं: सिस्टम कॉल करना केवल तब ही किया जाना चाहिए जब वास्तव में आवश्यक हो
  • अधिक टाइपिंग: सिस्टम ("विराम") हो चुके समय से अधिक है ()

एक सरल getchar () को अभी ठीक करना चाहिए।

संक्षेप में, यह प्रोग्रामों के निष्पादन को रोकना और सिस्टम कॉल करना और अनावश्यक संसाधनों को आवंटित करना है, जब आप cin.get () के रूप में सरल रूप से कुछ का उपयोग कर सकते हैं। लोग सिस्टम ("PAUSE") का उपयोग करते हैं क्योंकि वे चाहते हैं कि जब तक वे प्रोग्राम को दर्ज करने के लिए इंतजार न करे, तब तक वे अपना आउटपुट देख सकें। यदि आप इनपुट के लिए प्रतीक्षा करने के लिए प्रोग्राम चाहते हैं, तो इसके लिए फ़ंक्शंस में बनाया गया है जो कि क्रॉस प्लेटफॉर्म और कम मांग है।

इस आलेख में आगे की स्पष्टीकरण

आप iostream से std::cin.get() उपयोग कर सकते हैं:

 #include <iostream> // std::cout, std::cin using namespace std; int main() { do { cout << '\n' << "Press the Enter key to continue."; } while (cin.get() != '\n'); return 0; } 

इसके अलावा, system('pause') धीमा है, और ऐसी फ़ाइल भी शामिल है जिसे आपको शायद ज़रूरत नहीं है: stdlib.h । यह प्लेटफॉर्म पर निर्भर है, और वास्तव में एक 'आभासी' ओएस कॉल करता है

system("pause"); का प्रयोग system("pause"); Ungood Practice ™ क्योंकि

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

  • यह समस्याग्रस्त और परेशान है
    जब आप कमांड लाइन से प्रोग्राम चलाते हैं इंटरैक्टिव निष्पादन के लिए आपको अंत में एक कुंजी को बिना किसी उद्देश्य के लिए दबा देना होगा। और कुछ कार्य के स्वचालन में इस्तेमाल करने के लिए जो pause बहुत अवांछित है!

  • यह पोर्टेबल नहीं है
    यूनिक्स-भूमि में कोई मानक pause आदेश नहीं है।

pause कमांड एक आंतरिक cmd.exe कमांड है और इसे ओवरराइड नहीं किया जा सकता, जैसा कि कम से कम एक अन्य उत्तर में गलत तरीके से दावा किया गया है। Ie यह एक सुरक्षा जोखिम नहीं है, और दावा है कि ए वी प्रोग्राम इसका निदान करते हैं क्योंकि कमांड को ओवरराइड होने के दावे के रूप में यह संदिग्ध है (आखिरकार, एक सी ++ प्रोग्राम इनवॉकिंग system स्वयं को ऐसा करने की स्थिति में है जो कमांड इंटरप्रीटर कर सकता है, और अधिक)। इसके अलावा, जबकि पॉज़िंग का यह तरीका सी ++ प्रोग्रामिंग के सामान्य मानकों के द्वारा बहुत ही अक्षम है, वहीं नौसिखिया के कार्यक्रम के अंत में कोई फर्क नहीं पड़ता है।

इसलिए, इससे पहले जवाब की भीड़ में दावे सही नहीं हैं, और मुख्य कारण है कि आप system("pause") या आपके main के अंत में किसी भी अन्य प्रतीक्षा आदेश का उपयोग नहीं करना चाहिए, यह पहला बिंदु है: यह पूरी तरह से है अनावश्यक, यह बिल्कुल कोई उद्देश्य नहीं है, यह सिर्फ बहुत ही मूर्खतापूर्ण है।

क्योंकि यह पोर्टेबल नहीं है

 pause 

एक खिड़कियां / डॉस केवल प्रोग्राम है, इसलिए ये आपका कोड लिनक्स पर नहीं चलता होगा। इसके अलावा, system को आम तौर पर किसी अन्य प्रोग्राम को कॉल करने का एक बहुत अच्छा तरीका नहीं माना जाता है – यह आमतौर पर बेहतर बनाने के लिए CreateProcess या fork या कुछ समान है।

जैसा कि अन्य उत्तरों में सूचीबद्ध है, इस कारण से बचने के लिए आपको कई कारण मिल सकते हैं। यह सब एक कारण से उगलता है जो बाकी मुनाफा बनाता है। System() फ़ंक्शन स्वाभाविक रूप से असुरक्षित / अविश्वस्त है, और एक प्रोग्राम में तब तक शामिल नहीं किया जाना चाहिए जब तक कि आवश्यक न हो।

एक छात्र असाइनमेंट के लिए, यह शर्त कभी नहीं मिली थी, और इस कारण से मैं इस कार्यक्रम को चलाने के बिना भी एक असाइनमेंट को विफल कर सकता हूं अगर इस पद्धति का एक कॉल मौजूद था। (यह शुरू से स्पष्ट किया गया था।)

मेरे लिए यह बिना किसी कारण के बाहर निकलने से पहले इंतजार करना पड़ता है। एक प्रोग्राम जिसने अपना काम किया है, उसे समाप्त करना चाहिए और इसके संसाधन वापस अपने निर्माता को वापस करना चाहिए

एक भी काम के दिन के बाद एक अंधेरे कोने में चुपचाप नहीं लग रहा है, किसी को कंधे के टिपिंग के लिए प्रतीक्षा कर रहा है

यहां एक कारण है कि आपको इसका उपयोग नहीं करना चाहिए: यदि आप प्रोग्राम को किसी दूसरे मशीन में पास कर रहे हैं तो यह विंडोज़ पर चलने वाले अधिकांश एंटी-वायरस प्रोग्राम्स को पेश करने जा रहा है क्योंकि यह एक सुरक्षा खतरा है। यहां तक ​​कि अगर आपके प्रोग्राम में केवल एक सरल cout << "hello world\n"; system("pause"); cout << "hello world\n"; system("pause"); यह भारी संसाधन है और प्रोग्राम को सीएमडी कमांड तक पहुंच जाता है, जो एंटी वायरस खतरे के रूप में देखते हैं।

सिस्टम का उपयोग करने के लिए समर्थक ("PAUSE"); जबकि अपने कार्यक्रम के छोटे भाग बनाने के लिए यह स्वयं डिबगिंग के लिए है यदि आप इसे प्रत्येक प्रक्रिया के दौरान और बाद में आने के पहले चर के परिणाम प्राप्त करने के लिए उपयोग करते हैं तो आप यह आश्वस्त करने के लिए उपयोग कर रहे हैं कि वे ठीक से काम कर रहे हैं।

परीक्षण के बाद और उसे बाकी सारे समाधान के साथ पूर्ण स्विंग में ले जाने के बाद आपको इन पंक्तियों को निकालना चाहिए। यह एक उपयोगकर्ता परिभाषित एल्गोरिथ्म का परीक्षण करते समय वास्तव में अच्छा होता है और यह आश्वासन देता है कि आप जो परिणाम चाहते हैं, उसके लिए आप उचित क्रम में चीज़ें कर रहे हैं।

इसका कोई मतलब नहीं है कि आप इसका परीक्षण करने के बाद किसी एप्लिकेशन में इसका उपयोग करना चाहते हैं और आश्वासन दिया है कि यह ठीक से काम कर रहा है। हालांकि यह आपको हर चीज का ट्रैक रखने की अनुमति देता है जो चल रहा है जैसा कि ऐसा होता है। एंड-यूज़र एप्स के लिए इसका बिल्कुल भी इस्तेमाल न करें।

यह शैली का सब कुछ है यह डिबगिंग के लिए उपयोगी है लेकिन अन्यथा इसका उपयोग कार्यक्रम के अंतिम संस्करण में नहीं किया जाना चाहिए। यह सचमुच मेमोरी मुद्दे पर कोई फर्क नहीं पड़ता क्योंकि मुझे यकीन है कि जो लोग सिस्टम का आविष्कार करते हैं ("विराम") का आशंका है कि यह अक्सर इस्तेमाल किया जाएगा एक अन्य परिप्रेक्ष्य में कंप्यूटर कंप्यूटर पर हर जगह जो भी हम कंप्यूटर पर उपयोग करते हैं, उसकी स्मृति में गड़बड़ा हो जाता है और यह डायनामिक स्मृति आवंटन जैसे प्रत्यक्ष खतरा नहीं रखता है, इसलिए मैं इसे डीबगिंग कोड के लिए सुझाता हूं, लेकिन कुछ और नहीं।