كيفية إيقاف تطبيق وحدة التحكم C ++ من الخروج على الفور؟

StackOverflow https://stackoverflow.com/questions/2529617

سؤال

في الآونة الأخيرة ، كنت أحاول تعلم C ++ من هذا الموقع. لسوء الحظ ، كلما حاولت تشغيل إحدى عينات التعليمات البرمجية ، أرى أن هذا البرنامج مفتوح لمدة نصف ثانية تقريبًا ثم أغلق على الفور. هل هناك طريقة لمنع البرنامج من الإغلاق على الفور حتى أتمكن من رؤية ثمار جهدي؟

هل كانت مفيدة؟

المحلول

يحرر: كما يشير تشارلز بيلي بحق في تعليق أدناه ، لن يعمل هذا إذا كان هناك شخصيات مخزنة في stdin, ، وليس هناك طريقة جيدة للتغلب على ذلك. إذا كنت تعمل مع مرفق مصحح أخطاء ، حل جون ديبلينج المقترح ربما يكون أنظف حل لمشكلتك.

ومع ذلك ، سأترك هذا هنا وربما يجدها شخص آخر مفيدًا. لقد استخدمته كثيرًا كاختراق سريع للأنواع عند كتابة الاختبارات أثناء التطوير.


في نهاية الخاص بك main وظيفة ، يمكنك الاتصال std::getchar();

هذا سيحصل على شخصية واحدة من stdin, ، وبالتالي يمنحك نوعًا من السلوك "اضغط على أي مفتاح للمتابعة" (إذا كنت تريد بالفعل رسالة "اضغط على أي مفتاح" ، فسيتعين عليك طباعة واحدة بنفسك).

أنت بحاجه إلى #include <cstdio> إلى عن على getchar.

نصائح أخرى

إذا كنت تستخدم Visual Studio وبدأت تطبيق وحدة التحكم من IDE:

الضغط CTRL-F5 (ابدأ بدون تصحيح الأخطاء) سيبدأ التطبيق وتبقي نافذة وحدة التحكم مفتوحة حتى تضغط على أي مفتاح.

حل جيمس يعمل لجميع المنصات.

بدلا من ذلك Windows يمكنك أيضًا إضافة ما يلي قبل العودة من main وظيفة:

  system("pause");

هذا سوف يدير pause الأمر الذي ينتظر حتى تضغط على مفتاح ويعرض أيضًا رسالة لطيفة Press any key to continue . . .

إذا كنت تستخدم Visual C ++ 2010 من Microsoft وتواجه المشكلة مع Ctrl+F5 لا تعمل من أجل الحفاظ على وحدة التحكم بعد إنهاء البرنامج ، ألق نظرة على هذا الموضوع MSDN.

من المحتمل أن يتم تعيين IDE لإغلاق وحدة التحكم بعد تشغيل CTRL+F5 ؛ في الواقع ، يقوم "مشروع فارغ" في Visual C ++ 2010 بإغلاق وحدة التحكم افتراضيًا. لتغيير هذا ، افعل كما اقترح مشرف Microsoft:

يرجى النقر بزر الماوس الأيمن على اسم مشروعك والانتقال إلى صفحة الخصائص ، يرجى توسيع خصائص التكوين -> الرابط -> النظام ، يرجى تحديد وحدة التحكم (/النظام الفرعي: وحدة التحكم) في Subsystem Solddown. لأنه ، بشكل افتراضي ، لا يحدد المشروع الفارغ.

عادة ما أضع نقطة توقف main()إغلاق الدعامة المجعد. عندما يتم الوصول إلى نهاية البرنامج بأي وسيلة ستضرب نقطة التوقف ويمكنك التخلص من نافذة وحدة التحكم لعرض الإخراج.

لماذا لا تدير البرنامج فقط من وحدة تحكم ، أي قم بتشغيل البرنامج من cmd.exe إذا كنت تستخدم Windows. بهذه الطريقة تظل النافذة مفتوحة بعد انتهاء البرنامج.

تحرير]: عندما أستخدم kdevelop4 ، يوجد مثيل كامل من bash (linux cli) يعمل في علامة تبويب في أسفل IDE. وهو ما أستخدمه في هذا النوع من الظروف.

قبل نهاية الكود الخاص بك ، أدخل هذا السطر:

system("pause");

سيؤدي هذا إلى الحفاظ على وحدة التحكم حتى تضغط على المفتاح.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    cout << "Please enter your first name followed by a newline\n";
    cin >> s;
    cout << "Hello, " << s << '\n';
    system("pause"); // <----------------------------------
    return 0; // This return statement isn't necessary
}

مكالمة cin.get(); 2 مرات:

    //...
    cin.get();
    cin.get();
    return 0
}

إذا قمت بتشغيل الكود الخاص بك من IDE المختصة ، مثل الكود :: الكتل, ، ستقوم IDE بإدارة وحدة التحكم التي تستخدمها لتشغيل الرمز ، مع إبقائه مفتوحًا عند إغلاق التطبيق. لا ترغب في إضافة رمز خاص لإبقاء وحدة التحكم مفتوحة ، لأن هذا سيمنعها من العمل بشكل صحيح عند استخدامه بشكل حقيقي ، خارج IDE.

حسنًا ، أعتقد أنك على Windows باستخدام Visual Studio ... لماذا؟ حسنًا ، لأنه إذا كنت على نوع من نظام التشغيل Linux ، فربما تقوم بتشغيله من وحدة التحكم.

على أي حال ، يمكنك إضافة حماقة إلى نهاية برنامجك مثل الآخرين يقترحونها ، أو يمكنك فقط أن تضرب Ctrl + F5 (ابدأ بدون تصحيح الأخطاء) وسيترك Visual Studio وحدة التحكم بمجرد الانتهاء.

خيار آخر إذا كنت تريد تشغيل إصدار التصحيح وعدم إضافة حماقة إلى الكود الخاص بك هو فتح نافذة وحدة التحكم (ابدأ -> تشغيل -> cmd) وانتقل إلى الخاص بك دليل ناتج التصحيح. ثم ، ما عليك سوى إدخال اسم القابل للتنفيذ وسيقوم بتشغيل برنامج التصحيح الخاص بك في وحدة التحكم. يمكنك بعد ذلك استخدام إرفاق Visual Studio للعملية أو شيء ما إذا كنت ترغب حقًا في ذلك.

إذا كنت تقوم بالفعل بتصحيح التطبيق الخاص بك في Visual C ++ ، فاضغط على F5 أو المثلث الأخضر على شريط الأدوات. إذا لم تقم بتصحيحه حقًا (ليس لديك مجموعة نقاط توقف) ، فاضغط على Ctrl+F5 أو اختر ابدأ دون تصحيح الأخطاء على القوائم (عادة ما يكون في قائمة التصحيح ، والتي أوافق على مربك.) سيكون أسرع قليلاً ، والأهم من ذلك بالنسبة لك ، سوف يتوقف في النهاية دون الحاجة إلى تغيير التعليمات البرمجية الخاصة بك.

بدلاً من ذلك ، افتح موجه الأوامر ، وانتقل إلى المجلد الذي يوجد فيه EXE ، وقم بتشغيله عن طريق كتابة اسمه. وبهذه الطريقة عندما ينتهي تشغيل موجه الأوامر لا يغلق ويمكنك رؤية الإخراج. أنا أفضل هاتين الطريقتين لإضافة رمز يوقف التطبيق تمامًا كما انتهى.

فقط أضف ما يلي في نهاية البرنامج. سيحاول التقاط شكل من أشكال إدخال المستخدم وبالتالي يمنع وحدة التحكم من الإغلاق تلقائيًا.

cin.get();

أضف الأسطر التالية قبل أي exit() وظيفة أو قبل أي returnS في main():

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");

بالنسبة إلى Visual Studio (و Visual Studio فقط) ، يمنحك Snippet Code التالي موجه "Wait for Keypress للمتابعة" الذي ينتظر حقًا أن يضغط المستخدم الجديد المفتاح بشكل صريح ، عن طريق إيقاع المخزن المؤقت للإدخال أولاً:

#include <cstdio>
#include <tchar.h>
#include <conio.h>

_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();

لاحظ أن هذا يستخدم tchar.h الماكرو لتكون متوافقة مع "مجموعات الأحرف" المتعددة (كما يدعوها VC ++).

أنا فقط أفعل هذا:

//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;

ملاحظة: تطهير المخزن المؤقت CIN وهذا ضروري فقط إذا كنت قد استخدمت CIN في وقت ما في وقت سابق من البرنامج. أيضًا باستخدام std :: numeric_limits :: max () ربما يكون أفضل ثم int_max ، لكنه أمر موجود بعض الشيء وغير ضروري عادة.

يستخدم #include "stdafx.h" & system("pause"); تماما مثل الكود لأسفل أدناه.

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    std::cout << "hello programmer!\n\nEnter 2 numbers: ";
    int x, y;
    std::cin >> x >> y;
    int w = x*y;
    std::cout <<"\nyour answer is: "<< w << endl;
    system("pause");
}
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

    cout << "Press any key to continue...";
    getch();

    return 0;
}

لم ألاحظ أي شخص آخر ينشر هذا ، هنا هو.

فكرة مماثلة ل نعم الإجابة ، فقط البديل البسيط.

قم بإنشاء ملف دفعة مع المحتوى التالي:

helloworld.exe
pause

ثم استخدم ملف الدُفعات.

معرفة ما إذا كان لدى IDE مربع اختيار في إعداد المشروع للحفاظ على النافذة مفتوحة بعد أن ينتهي البرنامج. إذا لم يكن كذلك ، استخدم std::cin.get(); لقراءة شخصية في نهاية الوظيفة الرئيسية. ومع ذلك ، تأكد من استخدام المدخلات المستندة إلى الخط (STD :: GetLine) أو للتعامل مع بقايا الأحرف غير المقروءة على خلاف ذلك (std :: تجاهل حتى خط جديد) لأنه خلاف ذلك. غير مقروء في وقت سابق.

هذا يبدو انه يعمل جيدا:

cin.clear();
cin.ignore(2);

إذا قمت بمسح المخزن المؤقت أولاً ، فلن يكون ذلك مشكلة عند قراءة القراءة التالية. لسبب ما cin.ignore(1) لا يعمل ، يجب أن يكون 2.

يمكنك دائمًا إنشاء ملف دفعي. على سبيل المثال ، إذا كان برنامجك يسمى HelloWorld.exe ، فسيكون بعض التعليمات البرمجية:

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1

إذا كنت تقوم بتشغيل Windows ، فيمكنك القيام بذلك system("pause >nul"); أو system("pause");. يقوم بتنفيذ أمر وحدة التحكم لإيقاف البرنامج حتى تضغط على مفتاح. >nul يمنعها من القول Press any key to continue....

أنا أضع نقطة توقف في آخر عودة 0 من البرنامج. أنه يعمل بشكل جيد.

ببساطة

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}

إستعملت cin.get() وهذا يعمل ولكن في يوم من الأيام كنت بحاجة لاستخدام آخر cin.get([Array Variable]) قبل ذلك للاستيلاء على سلسلة لينغ مع حرف فارغ في منتصف. لذلك cin.get() لم تتجنب نافذة موجه الأوامر من الإغلاق. أخيرًا وجدت طريقة أخرى: اضغط Ctrl+F5 لفتح في نافذة خارجية ولم يعد لدى Visual Studio التحكم في ذلك. فقط سوف أسألك عن الإغلاق بعد تشغيل الأوامر النهائية.

حاولت وضع ملف getchar() وظيفة في النهاية. لكنها لم تنجح. إذن ما فعلته هو إضافة اثنين getchar() وظائف واحدة تلو الأخرى. أعتقد أن الأول getchar() يمتص يدخل المفتاح الذي تضغط عليه بعد آخر إدخال البيانات. لذا حاول إضافة اثنين getchar() وظائف بدلا من واحد

بدلاً من الضغط على زر التشغيل ، اضغط على CTRL و F5 في نفس الوقت ، وسيعطيك الصحافة أي مفتاح لمتابعة الرسالة. أو اكتب "(تحذير استخدم هذا فقط لاختبار البرامج وليس البرامج الفعلية لأن مكافحة الفيروسات لا تحب ذلك !!!!)" في نهاية وظيفتك الرئيسية ولكن (تحذير استخدم هذا فقط لاختبار البرامج وليس الفعلي كأجهزة مكافحة فيروسات 'ر مثله !!!!)

فقط استخدم cin.ignore () مباشرة قبل العودة 0 ؛ مرتين

main()
  {
  //your codes 

  cin.ignore();
  cin.ignore();

  return 0;
  }

هذا كل شئ

كل ما عليك القيام به تعيين متغير لـ x ثم اكتب هذا قبل العودة 0 ؛

cout<<"\nPress any key and hit enter to end...";
cin>>x;

يمكنك حتى إعلان عدد صحيح في بداية main() وظيفة (قل int a;) و ضع std::cin >> a; قبل قيمة الإرجاع مباشرة. لذلك سيستمر البرنامج في التشغيل حتى تضغط على مفتاح وتدخل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top