วิธีหยุดแอปพลิเคชันคอนโซล C ++ ออกจากทันทีหรือไม่


193

เมื่อเร็ว ๆ นี้ฉันพยายามเรียนรู้ C ++ จากเว็บไซต์นี้ น่าเสียดายที่เมื่อใดก็ตามที่ฉันพยายามเรียกใช้หนึ่งในตัวอย่างของรหัสฉันเห็นว่าโปรแกรมนั้นเปิดประมาณครึ่งวินาทีแล้วปิดทันที มีวิธีหยุดโปรแกรมไม่ให้ปิดทันทีหรือไม่เพื่อที่ฉันจะได้เห็นผลของความพยายามของฉัน?


5
คุณคลิกสองครั้งที่ปฏิบัติการได้หรือไม่? คุณทำงานใน Windows หรือไม่ ทำไมคุณไม่ทำงานจาก Command shell และพิมพ์คำสั่งตามที่คุณต้องการ
S.Lott

8
@S Lott: เพราะถ้าคุณกดปุ่ม "Go" ใน IDE ของคุณคุณไม่จำเป็นต้องกังวลกับคอนโซล
Billy ONeal

4
คุณควรพิจารณารับหนังสือที่ดีสำหรับการเรียนรู้ C ++ เว็บไซต์เป็นแหล่งข้อมูลที่ดี แต่ไม่ตรงกับข้อความเกริ่นนำที่ดี มีรายชื่อหนังสือ C ++ ที่ชัดเจนที่นี่: stackoverflow.com/questions/388242/…
James McNellis

6
@Billy หากกดปุ่ม Go จะปิดแอปเมื่อมันยุติลงคุณกำลังใช้งาน IDE ผิด

2
ถามและตอบก่อนหน้านี้ที่นี่: stackoverflow.com/questions/902261/…แม้ว่าอันนี้จะมีชื่อที่ดีกว่า
dmckee --- ผู้ดูแลอดีตลูกแมว

คำตอบ:


121

แก้ไข: เนื่องจาก Charles Bailey ชี้ให้เห็นอย่างถูกต้องในความคิดเห็นด้านล่างสิ่งนี้จะไม่ทำงานหากมีตัวละครบัฟเฟอร์stdinและไม่มีวิธีที่ดีในการแก้ไข หากคุณกำลังเรียกใช้โดยใช้ตัวดีบักเกอร์วิธีแก้ปัญหาที่แนะนำของ John Diblingอาจเป็นวิธีแก้ปัญหาของคุณที่สะอาดที่สุด

ที่กล่าวว่าฉันจะออกจากที่นี่และบางทีคนอื่นจะพบว่ามีประโยชน์ ฉันใช้มันมากในการแฮ็คอย่างรวดเร็วเมื่อเขียนการทดสอบระหว่างการพัฒนา


ในตอนท้ายของmainฟังก์ชั่นของคุณคุณสามารถโทรstd::getchar();

สิ่งนี้จะได้รับอักขระเดี่ยวจากstdinดังนั้นให้การเรียงลำดับพฤติกรรม "กดปุ่มใด ๆ เพื่อดำเนินการต่อ" (ถ้าคุณต้องการข้อความ "กดแป้นใด ๆ " จริง ๆ คุณจะต้องพิมพ์ด้วยตัวเอง)

คุณจำเป็นต้องสำหรับ#include <cstdio>getchar


15
getcharไม่ได้แก้ปัญหา - หรือเฉพาะในสถานการณ์ที่ จำกัด อย่างน้อย มันอ่านถ่านจากstdinแต่ถ้ามีตัวละครบัฟเฟอร์จาก stdin โปรแกรมจะดำเนินการโดยไม่รอไม่ว่าคุณจะพิมพ์พรอมต์หรือไม่
CB Bailey

1
@Charles: เป็นจุดที่ดี ไม่สนใจจนกว่า\nจะเป็นวิธีแก้ปัญหาบางส่วน แต่จะไม่ช่วยถ้ามีมากกว่าหนึ่งบรรทัดของข้อมูลที่ถูกบัฟเฟอร์ ฉันไม่รู้วิธี C ++ มาตรฐานเพื่อล้างข้อมูลทุกอย่างจากอินพุตสตรีม : - /
James McNellis

1
@James: แก่แล้ว แต่std::cin.ignore(std::cin.rdbuf()->in_avail());ล่ะ? ได้จากที่นี่
GManNickG

1
ทางเลือกหนึ่งที่ผมใช้มากคือมีstd::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); #include <limits>
Xeo

5
โปรดอย่าทำเช่นนี้ :( มันไม่ได้เป็นส่วนหนึ่งของฟังก์ชั่นโปรแกรมของคุณในการทำเช่นนี้
Lightness Races ใน Orbit

138

หากคุณใช้ Visual Studio และคุณกำลังเริ่มใช้งานแอปพลิเคชันคอนโซลจาก IDE:

กดCTRL-F5 (เริ่มโดยไม่มีการดีบัก) จะเริ่มต้นแอปพลิเคชันและเปิดหน้าต่างคอนโซลค้างไว้จนกว่าคุณจะกดปุ่มใด ๆ


1
เริ่มคอนโซลจาก IDE หรือไม่ คุณจะทำอย่างไรและทำไม
CodyBugstein

1
มันเยี่ยมมากเลย เหตุใดจึงไม่เป็นพฤติกรรมเริ่มต้นของ Visual Studio
โคมไฟ

ฉันยังคิดว่าเป็นวิธีที่จะทำจนถึงวันนี้เมื่อฉันสร้างโปรแกรมคอนโซลที่เรียบง่ายและวิธีการดังกล่าวไม่ทำงาน :(
KansaiRobot

1
มีรุ่นนี้ด้วยการแก้จุดบกพร่องหรือไม่?
luckyging3r

109

โซลูชันของ James ใช้งานได้กับแพลตฟอร์มทั้งหมด

หรือWindowsคุณสามารถเพิ่มสิ่งต่อไปนี้ก่อนที่คุณจะกลับจากmainฟังก์ชัน:

  system("pause");

นี้จะเรียกใช้pauseคำสั่งที่รอจนกว่าคุณจะกดปุ่มและยังแสดงข้อความที่ดีPress any key to continue . . .


2
นั่นฟังดูคล้ายกับการแก้ปัญหา Rube Goldberg
Dave Van den Eynde

4
@Dave Van den Eynde: มันค่อนข้างธรรมดาและเป็นมาตรฐานในรหัส boilerplate ใน DevCPP +1
Billy ONeal

4
@Dave ในทางกลับกันมันทำให้ชัดเจนว่านี่เป็นเพียงตัวอย่างสำหรับในขณะที่ std: getch อาจถูกทิ้งไว้ในรหัสจริงโดยไม่ตั้งใจ
Martin Beckett

2
นี่เป็นโซลูชันที่สมบูรณ์แบบสำหรับผู้ใช้บน Windows ในขณะที่ไม่เหมาะมันก็ใช้งานได้
thecoshman

วิธีแก้ปัญหาที่ง่ายที่สุดเร็วที่สุด สิ่งที่ฉันต้องการ
CodyBugstein

83

หากคุณกำลังใช้ Visual C ++ 2010 Express ของ Microsoft และพบปัญหากับCTRL + F5ไม่ทำงานเพื่อให้คอนโซลเปิดหลังจากโปรแกรมสิ้นสุดลงให้ดูที่เธรด MSDNนี้

ดูเหมือนว่า IDE ของคุณจะถูกตั้งค่าให้ปิดคอนโซลหลังจากการรัน CTRL + F5 อันที่จริง "เปล่าโครงการ" ใน Visual C ++ 2010 ปิดคอนโซลโดยค่าเริ่มต้น หากต้องการเปลี่ยนแปลงสิ่งนี้ให้ทำตามที่ Microsoft Moderator แนะนำ:

กรุณาคลิกขวาที่ชื่อโครงการของคุณและไปที่หน้าคุณสมบัติกรุณาขยายคุณสมบัติการกำหนดค่า -> ตัวเชื่อมโยง -> ระบบกรุณาเลือกคอนโซล (/ ระบบย่อย: คอนโซล) ในเมนูแบบเลื่อนลงของระบบย่อย เนื่องจากโดยค่าเริ่มต้นโครงการว่างเปล่าไม่ได้ระบุ


1
ถ้าไม่ใช่แอพคอนโซลล่ะ?
Jesse Pepper

3
@ Mr.Underhill วิธีนี้จะใช้งานได้หากคุณเรียกใช้โดยไม่มีดีบักเกอร์ (Ctrl + F5)
Jonathan Mee

นอกเหนือจากการเป็นวิธีการแก้ปัญหาที่ไม่แฮ็กเพียงอย่างเดียวนี่เป็นวิธีเดียวที่จะเห็นการพิมพ์จากตัวทำลายวัตถุสแต็กหลัก
Poniros

20

ฉันมักจะใส่เบรกพอยต์main()ของปีกกาปิดของ เมื่อถึงจุดสิ้นสุดของโปรแกรมโดยไม่ว่าอะไรก็ตามจุดพักจะกดและคุณสามารถ ALT-Tab ไปที่หน้าต่างคอนโซลเพื่อดูผลลัพธ์


14

ทำไมไม่เพียงเรียกใช้โปรแกรมจากคอนโซลเช่นเรียกใช้โปรแกรมจาก cmd.exe หากคุณใช้ Windows ทางหน้าต่างจะยังคงเปิดอยู่หลังจากโปรแกรมเสร็จสิ้น

[แก้ไข]: เมื่อฉันใช้ KDevelop4 มีอินสแตนซ์เต็มรูปแบบของ Bash (Linux CLI) ที่ทำงานในแท็บที่ด้านล่างของ IDE นี่คือสิ่งที่ฉันใช้ในสถานการณ์แบบนี้


3
เพราะถ้าคุณใช้ IDE คุณจะไม่ใช้คอนโซล คุณผลักดันโปรแกรมทำงานและนั่นก็คือ
Billy ONeal

3
IDE ที่มีความสามารถใด ๆ จะเก็บคอนโซลไว้บนหน้าจอเมื่อแอปยุติ - Code :: Blocks ตัวอย่างเช่นนี้

3
@nobugz: ฉันคิดออก ในการทำให้หน้าต่างติดคุณต้องมี / SUBSYSTEM: CONSOLE บนบรรทัดคำสั่ง linker เอกสารระบุว่านี่เป็นค่าเริ่มต้นหากmainมีการกำหนดไว้ แต่หากฉันไม่ได้กำหนดไว้อย่างชัดเจนในบรรทัดคำสั่ง VS จะฆ่าหน้าต่างเมื่อแอปพลิเคชันออก ถอนหายใจ
James McNellis

2
@James: นั่นเป็นสิ่งที่จำเป็นเพื่อให้ได้หน้าต่างคอนโซลในตอนแรก ในทางกลับกันต้องใช้ main () แทน WinMain () ไม่ใช่วิธีอื่น ๆ ฉันแพ้ไปนิดหน่อย ...
ฮันส์แพสแทนท์

4
@nobugz: หากคุณเริ่มจาก "Empty Project" แทนที่จะเป็น "Win32 Console Application" ระบบย่อยจะไม่ถูกตั้งค่าอย่างชัดเจนในคุณสมบัติของโครงการ หากคุณกำหนดไว้mainในโครงการตัวเชื่อมโยงโดยค่าเริ่มต้นจะใช้ระบบย่อย CONSOLE เมื่อทำการดีบั๊กหรือเรียกใช้คุณจะได้รับหน้าต่างคอนโซล อย่างไรก็ตามถ้าคุณไม่ระบุ CONSOLE เป็นระบบย่อยในคุณสมบัติโครงการ Visual Studio จะไม่เปิดหน้าต่างคอนโซลไว้ ฉันมักจะเริ่มต้นจากโครงการที่ว่างเปล่าและฉันไม่ค่อยเปลี่ยนคุณสมบัติของแต่ละโครงการดังนั้นฉันจึงไม่เคยเห็นหน้าต่างคอนโซลติดอยู่ ขออภัยในความสับสน
James McNellis

9

ก่อนที่จะสิ้นสุดรหัสให้แทรกบรรทัดนี้:

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
}

นอกจากนี้ยังพิมพ์ "กดปุ่มใดก็ได้เพื่อดำเนินการต่อ.." สำหรับฉัน.
PapaHotelPapa

8

โทรcin.get();2 ครั้ง:

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

6
แต่ทำไมสองครั้ง
Madhawa Priyashantha

เกิดอะไรขึ้นถ้าเราต้องการ cin.get () อีกอันสำหรับรับตัวอย่างสตริงบางส่วนในอาร์เรย์ก่อนหน้านี้ มันไม่ทำงานในสถานการณ์นี้
QMaster

4

หากคุณเรียกใช้รหัสของคุณจาก IDE ที่มีความสามารถเช่นCode :: Blocksนั้น IDE จะจัดการคอนโซลที่ใช้ในการเรียกใช้รหัสเพื่อให้เปิดขึ้นเมื่อปิดแอปพลิเคชัน คุณไม่ต้องการเพิ่มรหัสพิเศษเพื่อให้คอนโซลเปิดอยู่เพราะจะเป็นการป้องกันไม่ให้ทำงานได้อย่างถูกต้องเมื่อคุณใช้งานจริงนอก IDE


3

โอเคฉันเดาว่าคุณใช้ Windows โดยใช้ Visual Studio ... เพราะอะไร เพราะถ้าคุณอยู่บนระบบปฏิบัติการ Linux บางประเภทคุณอาจต้องเรียกใช้จากคอนโซล

อย่างไรก็ตามคุณสามารถเพิ่มอึท้ายโปรแกรมของคุณเหมือนที่คนอื่นกำลังแนะนำหรือคุณสามารถกดCTRL + F5 (เริ่มโดยไม่มีการดีบัก) และ Visual Studio จะออกจากคอนโซลเมื่อเสร็จสิ้น

อีกตัวเลือกหนึ่งถ้าคุณต้องการที่จะทำงานรุ่นตรวจแก้จุดบกพร่องและไม่เพิ่มอึรหัสของคุณคือการเปิดหน้าต่างคอนโซล (Start -> Run -> cmd) และนำทางไปยังคุณไดเรกทอรีออกตรวจแก้จุดบกพร่อง จากนั้นเพียงป้อนชื่อไฟล์ที่เรียกทำงานได้ของคุณและมันจะรันโปรแกรมดีบั๊กในคอนโซล จากนั้นคุณสามารถใช้ไฟล์แนบของ Visual Studio เพื่อประมวลผลหรืออะไรก็ได้ถ้าคุณต้องการ


3
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

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

    return 0;
}

ฉันไม่ได้สังเกตเห็นคนอื่นโพสต์สิ่งนี้ดังนั้นที่นี่เป็น


ฉันจะเพิ่มที่conio.hเป็นส่วนหัวเฉพาะ Windows และอาจไม่สามารถใช้ได้ในทุกเครื่อง (หรือคุณอาจต้องเชื่อมโยงแยกต่างหากซึ่งเป็น overkill)
Yksisarvinen

การทำงาน เพียงต้องการเปลี่ยน getch (); ถึง _getch (); ตั้งแต่มันถูกลดขนาดลง
ncesar

2

ถ้าคุณกำลังดีบักแอปพลิเคชันของคุณจริงใน Visual C ++ กด F5 หรือสามเหลี่ยมสีเขียวบนแถบเครื่องมือ หากคุณไม่ได้ทำการดีบั๊กจริง ๆ (คุณไม่มีชุดเบรกพอยต์) ให้กด Ctrl + F5 หรือเลือกเริ่มโดยไม่ต้องทำการดีบั๊กบนเมนู (โดยปกติจะอยู่ในเมนูดีบั๊ก และที่สำคัญสำหรับคุณจะหยุดในตอนท้ายโดยที่คุณไม่ต้องเปลี่ยนรหัสของคุณ

หรือเปิดพรอมต์คำสั่งนำทางไปยังโฟลเดอร์ที่ exe ของคุณอยู่และเรียกใช้โดยพิมพ์ชื่อ ด้วยวิธีนี้เมื่อการเรียกใช้พรอมต์คำสั่งเสร็จสิ้นแล้วจะไม่ปิดและคุณสามารถเห็นเอาต์พุต ฉันชอบวิธีการทั้งสองนี้ในการเพิ่มรหัสที่หยุดแอปเมื่อเสร็จแล้ว


2

เพียงเพิ่มรายการต่อไปนี้ในตอนท้ายของโปรแกรม มันจะพยายามดักจับรูปแบบการป้อนข้อมูลของผู้ใช้บางรูปแบบดังนั้นมันจะหยุดคอนโซลจากการปิดโดยอัตโนมัติ

cin.get();

2

เพิ่มบรรทัดต่อไปนี้ก่อนexit()ฟังก์ชั่นหรือก่อนหน้าใด ๆreturnในmain():

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

สิ่งนี้ไม่ได้ผลสำหรับฉันบรรทัดแรกใช้งานได้ แต่การกด Enter ไม่ได้ผลอะไรเลย
Qwertie

2

สำหรับ Visual Studio (และเฉพาะ Visual Studio) โค้ดต่อไปนี้ให้คุณพร้อมท์ 'รอให้กดปุ่มเพื่อดำเนินการต่อ' ที่รอให้ผู้ใช้กดปุ่มใหม่อย่างชัดเจนโดยล้างบัฟเฟอร์อินพุตก่อน:

#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 ++ เรียกพวกเขา)


2

ฉันแค่ทำสิ่งนี้:

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

หมายเหตุ: การล้าง cin buffer และจำเป็นเฉพาะเมื่อคุณใช้ cin ณ จุดก่อนหน้าในโปรแกรมของคุณ การใช้ std :: numeric_limits :: max () ก็น่าจะดีกว่า INT_MAX แต่มันค่อนข้างจะพูดมากและไม่จำเป็น


มันใช้งานได้ แต่ผลตอบแทน 0; จะไม่ทำงานถ้าฉันใช้รหัสนี้
wernersbacher

2

ใช้#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");
}

systemจะมีการประกาศในไม่<cstdlib> stdafx.h
melpomene

1

ความคิดคล้ายกับYehคำตอบทางเลือกเพียงเรียบง่าย

สร้างแบตช์ไฟล์ที่มีเนื้อหาดังต่อไปนี้:

helloworld.exe
pause

จากนั้นใช้ไฟล์แบตช์


1

ง่ายดาย

#include <cstdio>

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

ด้วยเหตุผลบางอย่างมักจะมี 1 ตัวอักษรที่เป็นไปได้ที่จะอ่านด้วย getchar แล้วใน stdin เมื่อคุณเรียกใช้โปรแกรม ดังนั้น getchar ตัวแรกจะอ่านตัวอักษรนี้และ getchar ตัวที่สองจะรอให้อินพุต (ของคุณ) ของผู้ใช้ก่อนออกจากโปรแกรม และหลังจากโปรแกรมออกจากเทอร์มินัลส่วนใหญ่โดยเฉพาะใน Windows ปิดเทอร์มินัลทันที ดังนั้นสิ่งที่เรามุ่งหวังคือวิธีง่ายๆในการป้องกันไม่ให้โปรแกรมเสร็จสิ้นหลังจากที่ส่งออกทุกอย่าง แน่นอนว่ามีวิธีที่ซับซ้อนและสะอาดกว่าในการแก้ปัญหานี้ แต่นี่เป็นวิธีที่ง่ายที่สุด


2
โปรดเพิ่มคำอธิบายสั้น ๆ ว่าเหตุใดจึงแก้ปัญหาได้
kaya3

0

ดูว่า IDE ของคุณมีช่องทำเครื่องหมายในการตั้งค่าโครงการเพื่อให้หน้าต่างเปิดหลังจากโปรแกรมสิ้นสุด ถ้าไม่ใช้std::cin.get();ให้อ่านตัวอักษรที่ท้ายฟังก์ชั่นหลัก อย่างไรก็ตามต้องแน่ใจว่าใช้เฉพาะอินพุตแบบบรรทัด (std :: getline) หรือเพื่อจัดการกับอักขระที่ยังไม่ได้อ่านที่เหลือเป็นอย่างอื่น (std :: ละเว้นจนกระทั่งขึ้นบรรทัดใหม่) เพราะมิฉะนั้น. get () ที่ท้ายจะอ่านขยะที่คุณทิ้งไว้ ยังไม่ได้อ่านก่อนหน้านี้


0

ดูเหมือนว่าจะทำงานได้ดี:

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

หากคุณล้างบัฟเฟอร์ก่อนจะไม่มีปัญหาเมื่อคุณอ่านบัฟเฟอร์ถัดไป ด้วยเหตุผลบางอย่างcin.ignore(1)ไม่ทำงานจะต้องเป็น 2


1
2 บางครั้งก็ยังไม่เพียงพอ (เมื่อมีการกดแป้นอีกครั้งในคิว) วิธีที่ถูกต้องคือละเว้นอักขระมากเท่าที่อยู่ในคิว ถึงด้วย, cin.rdbuf()->in_avail. ไม่ใช่หมายเลขมายากลเช่น 1 หรือ 2
Konrad Rudolph

0

คุณสามารถสร้างไฟล์แบตช์ได้ตลอดเวลา ตัวอย่างเช่นหากโปรแกรมของคุณชื่อ helloworld.exe บางรหัสจะเป็น:

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

0

หากคุณกำลังใช้ Windows แล้วคุณสามารถทำหรือsystem("pause >nul"); system("pause");มันรันคำสั่งคอนโซลเพื่อหยุดโปรแกรมชั่วคราวจนกว่าคุณจะกดปุ่ม ป้องกันไม่ให้มันพูด>nulPress any key to continue...


0

ฉันกำลังเบรกพอยต์ที่ 0 ของโปรแกรมคืนสุดท้าย มันใช้งานได้ดี


1
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม จะวิจารณ์หรือการร้องขอคำชี้แจงจากผู้เขียนแสดงความคิดเห็นด้านล่างโพสต์ของพวกเขา - คุณสามารถแสดงความคิดเห็นในโพสต์ของคุณเองและเมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด
Ravi Dhoriya ツ

1
วิธีนี้ไม่ได้ให้คำตอบ? ฉันอยู่ในสถานการณ์เดียวกันเช่นผู้เขียนคำถามและสิ่งนี้ช่วย
lierosk

0

ฉันใช้cin.get()แล้วและมันใช้งานได้ แต่วันหนึ่งฉันต้องใช้อีกอันcin.get([Array Variable])ก่อนหน้านั้นเพื่อจับสตริงลิงที่มีอักขระว่างอยู่ตรงกลาง ดังนั้นcin.get()ไม่ได้ปิดหน้าต่างพรอมต์คำสั่ง ในที่สุดฉันก็พบวิธีอื่น: กดCTRL + F5เพื่อเปิดในหน้าต่างภายนอกและ Visual Studio ไม่สามารถควบคุมได้อีกต่อไป จะถามคุณเกี่ยวกับการปิดหลังจากคำสั่งสุดท้ายรัน


0

ฉันพยายามใส่getchar()ฟังก์ชั่นในตอนท้าย แต่มันไม่ทำงาน ดังนั้นสิ่งที่ฉันทำคือเพิ่มgetchar()ฟังก์ชันสองฟังก์ชันทีละอัน ฉันคิดว่าปุ่มแรกgetchar()จะดูดซับEnterคีย์ที่คุณกดหลังจากป้อนข้อมูลล่าสุด ดังนั้นลองเพิ่มสองgetchar()ฟังก์ชันแทนหนึ่ง


0

แทนที่จะกดปุ่มเรียกใช้ให้กด CTRL และ F5 ในเวลาเดียวกันมันจะให้กดปุ่มใด ๆ เพื่อดำเนินการต่อข้อความ หรือพิมพ์ "(คำเตือนใช้สำหรับการทดสอบไม่ใช่โปรแกรมจริงเนื่องจากแอนติไวรัสไม่ชอบมัน !!!!)" ในตอนท้ายของฟังก์ชั่นหลักของคุณ แต่: (คำเตือนใช้เพื่อการทดสอบไม่ใช่โปรแกรมจริงเท่านั้น ไม่ชอบเลย !!!!)


0

เพียงใช้ cin.ignore () ก่อนกลับ 0; สองครั้ง

main()
  {
  //your codes 

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

  return 0;
  }

นั่นคือทั้งหมด


ปกติฉันจะทำอะไรแบบนี้ cin.ignore (); cin.get ();
aj.toulan


-1

คุณสามารถประกาศจำนวนเต็มที่จุดเริ่มต้นของmain()ฟังก์ชันของคุณ(พูดint a;) และใส่std::cin >> a;ก่อนค่าส่งคืน ดังนั้นโปรแกรมจะทำงานต่อไปจนกว่าคุณจะกดปุ่มและป้อน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.