Akhir-akhir ini, saya mencoba mempelajari C ++ dari situs web ini . Sayangnya setiap kali saya mencoba menjalankan salah satu contoh kode, saya melihat program itu terbuka selama sekitar setengah detik dan kemudian segera ditutup. Apakah ada cara untuk menghentikan program dari penutupan segera sehingga saya dapat melihat buah dari usaha saya?
193
Jawaban:
Sunting: Seperti yang ditunjukkan Charles Bailey dengan benar di komentar di bawah, ini tidak akan berfungsi jika ada karakter yang di-buffered
stdin
, dan benar-benar tidak ada cara yang baik untuk mengatasinya. Jika Anda menjalankan dengan debugger terpasang, solusi yang disarankan John Dibling mungkin merupakan solusi terbersih untuk masalah Anda.Yang mengatakan, saya akan meninggalkan ini di sini dan mungkin orang lain akan merasakan manfaatnya. Saya sering menggunakannya sebagai retasan cepat saat menulis tes selama pengembangan.
Di akhir
main
fungsi Anda, Anda dapat meneleponstd::getchar();
Ini akan mendapatkan satu karakter dari
stdin
, sehingga memberi Anda semacam "tekan tombol apa saja untuk melanjutkan" perilaku (jika Anda benar-benar menginginkan pesan "tekan tombol apa saja", Anda harus mencetaknya sendiri).Anda perlu
#include <cstdio>
untukgetchar
.sumber
getchar
tidak menyelesaikan masalah - atau hanya dalam keadaan terbatas, setidaknya. Bunyinya char daristdin
, tetapi jika sudah ada karakter buffered dari stdin program akan melanjutkan tanpa menunggu terlepas dari apakah Anda mencetak prompt atau tidak.\n
merupakan solusi parsial, tetapi tidak akan membantu jika lebih dari satu baris input disangga. Saya tidak tahu cara C ++ standar untuk menghapus semuanya dari input stream. : - /std::cin.ignore(std::cin.rdbuf()->in_avail());
? Dapat dari sini .std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
dengan#include <limits>
.Jika Anda menggunakan Visual Studio dan Anda memulai aplikasi konsol dari IDE:
menekan CTRL-F5 (mulai tanpa debugging) akan memulai aplikasi dan membuka jendela konsol sampai Anda menekan tombol apa saja.
sumber
Solusi oleh James bekerja untuk semua Platform.
Atau
Windows
Anda juga dapat menambahkan yang berikut sebelum kembali darimain
fungsi:Ini akan menjalankan
pause
perintah yang menunggu hingga Anda menekan tombol dan juga menampilkan pesan yang bagusPress any key to continue . . .
sumber
Jika Anda menggunakan Microsoft Visual C ++ 2010 Express dan mengalami masalah dengan CTRL + F5 tidak berfungsi untuk menjaga konsol tetap terbuka setelah program berakhir, lihat utas MSDN ini .
Kemungkinan IDE Anda diatur untuk menutup konsol setelah menjalankan CTRL + F5; bahkan, "Proyek Kosong" di Visual C ++ 2010 menutup konsol secara default. Untuk mengubah ini, lakukan seperti yang disarankan Moderator Microsoft:
sumber
Saya biasanya hanya meletakkan breakpoint pada
main()
kurung kurawal penutupan. Ketika akhir program tercapai dengan cara apa pun, breakpoint akan menekan dan Anda dapat ALT-Tab ke jendela konsol untuk melihat output.sumber
Mengapa tidak menjalankan saja program dari konsol, mis. Jalankan program dari cmd.exe jika Anda menggunakan Windows. Dengan begitu jendela tetap terbuka setelah program selesai.
[EDIT]: Ketika saya menggunakan KDevelop4 ada contoh penuh Bash (Linux CLI) yang berjalan di tab di bagian bawah IDE. Itulah yang saya gunakan dalam situasi seperti ini.
sumber
main
didefinisikan, tetapi jika saya tidak secara eksplisit mengaturnya pada baris perintah, VS membunuh jendela ketika aplikasi keluar. desahmain
dalam proyek, tautan secara default menggunakan subsistem CONSOLE. Saat debugging atau berjalan, Anda akan mendapatkan jendela konsol. Namun, kecuali Anda secara eksplisit menentukan CONSOLE sebagai subsistem dalam properti proyek, Visual Studio tidak akan membuat jendela konsol tetap terbuka. Saya selalu memulai dari proyek kosong dan saya jarang mengubah properti proyek individu, jadi saya belum pernah melihat jendela konsol tetap. Maaf atas kebingunganSebelum akhir kode Anda, masukkan baris ini:
Ini akan menjaga konsol sampai Anda menekan tombol.
sumber
Telepon
cin.get();
2 kali:sumber
Jika Anda menjalankan kode dari IDE yang kompeten, seperti Code :: Blocks , IDE akan mengelola konsol yang digunakannya untuk menjalankan kode tersebut, menjaganya tetap terbuka ketika aplikasi ditutup. Anda tidak ingin menambahkan kode khusus agar konsol tetap terbuka, karena ini akan mencegahnya berfungsi dengan benar ketika Anda menggunakannya secara nyata, di luar IDE.
sumber
Oke saya kira Anda menggunakan Windows di Visual Studio ... mengapa? Nah, karena jika Anda menggunakan sistem operasi Linux maka Anda mungkin akan menjalankannya dari konsol.
Bagaimanapun, Anda dapat menambahkan omong kosong ke akhir program Anda seperti yang disarankan orang lain, atau Anda bisa menekan CTRL + F5 (mulai tanpa debugging) dan Visual Studio akan meninggalkan konsol setelah selesai.
Opsi lain jika Anda ingin menjalankan versi Debug dan tidak menambahkan omong kosong ke kode Anda adalah membuka jendela konsol (Mulai -> Jalankan -> cmd) dan arahkan ke direktori keluaran Debug Anda . Kemudian, cukup masukkan nama executable Anda dan itu akan menjalankan program debug Anda di konsol. Anda kemudian dapat menggunakan lampiran Visual Studio untuk memproses atau sesuatu jika Anda benar-benar ingin.
sumber
Saya tidak memperhatikan orang lain memposting ini jadi ini dia.
sumber
conio.h
adalah tajuk khusus Windows dan mungkin tidak tersedia di setiap mesin (atau Anda mungkin perlu menautkannya secara terpisah, yang merupakan pembunuhan berlebihan).Jika Anda benar-benar men-debug aplikasi Anda di Visual C ++, tekan F5 atau segitiga hijau pada toolbar. Jika Anda tidak benar-benar men-debug itu (Anda tidak memiliki set breakpoints), tekan Ctrl + F5 atau pilih Mulai Tanpa Debug pada menu (biasanya pada menu Debug, yang saya setuju membingungkan.) Ini akan menjadi sedikit lebih cepat, dan yang lebih penting bagi Anda, akan berhenti pada akhirnya tanpa Anda harus mengubah kode Anda.
Atau, buka prompt perintah, navigasikan ke folder tempat exe Anda, dan jalankan dengan mengetik namanya. Dengan begitu ketika selesai menjalankan command prompt tidak menutup dan Anda dapat melihat hasilnya. Saya lebih suka kedua metode ini untuk menambahkan kode yang menghentikan aplikasi begitu selesai.
sumber
Cukup tambahkan berikut ini di akhir program Anda. Ini akan mencoba menangkap beberapa bentuk input pengguna sehingga menghentikan konsol dari menutup secara otomatis.
sumber
Tambahkan baris berikut sebelum
exit()
fungsi apa pun atau sebelum apa punreturn
dimain()
:sumber
Untuk Visual Studio (dan hanya Visual Studio) potongan kode berikut memberi Anda prompt 'tunggu penekanan tombol untuk melanjutkan' yang benar-benar menunggu pengguna untuk menekan tombol baru secara eksplisit, dengan terlebih dahulu menyiram buffer input:
Perhatikan bahwa ini menggunakan
tchar.h
makro agar kompatibel dengan beberapa 'set karakter' (sebagaimana VC ++ menyebutnya).sumber
Saya hanya melakukan ini:
Catatan: menghapus buffer cin dan itu hanya diperlukan jika Anda telah menggunakan cin di beberapa titik sebelumnya dalam program Anda. Juga menggunakan std :: numeric_limits :: max () mungkin lebih baik daripada INT_MAX, tapi agak bertele-tele dan biasanya tidak perlu.
sumber
Gunakan
#include "stdafx.h"
&system("pause");
seperti kode di bawah ini.sumber
system
dinyatakan dalam<cstdlib>
, bukanstdafx.h
.Mirip dengan jawaban yeh , alternatifnya hanya minimalis.
Buat file batch dengan konten berikut:
Kemudian gunakan file batch.
sumber
secara sederhana
untuk beberapa alasan biasanya ada 1 karakter yang dapat dibaca dengan getchar yang sudah ada di stdin ketika Anda menjalankan suatu program. jadi getchar pertama membaca karakter ini, dan getchar kedua menunggu input pengguna (Anda) sebelum keluar dari program. Dan setelah suatu program keluar sebagian besar terminal, terutama pada terminal tutup Windows segera. jadi apa yang kami tuju adalah cara sederhana untuk mencegah suatu program selesai setelah menghasilkan segalanya. Tentu saja ada cara yang lebih kompleks dan bersih untuk menyelesaikan ini, tetapi ini adalah yang paling sederhana.
sumber
Lihat apakah IDE Anda memiliki kotak centang dalam pengaturan proyek untuk menjaga jendela tetap terbuka setelah program berakhir. Jika tidak, gunakan
std::cin.get();
untuk membaca karakter di akhir fungsi utama. Namun, pastikan untuk hanya menggunakan input berbasis baris (std :: getline) atau untuk menangani sisa karakter yang belum dibaca yang belum dibaca (std :: abaikan hingga baris baru) karena jika tidak .get () pada akhirnya hanya akan membaca sampah yang Anda tinggalkan belum dibaca sebelumnya.sumber
Ini tampaknya bekerja dengan baik:
Jika Anda menghapus buffer terlebih dahulu, itu tidak akan menjadi masalah ketika Anda membaca yang berikutnya. Untuk beberapa alasan
cin.ignore(1)
tidak berfungsi, itu harus 2.sumber
cin.rdbuf()->in_avail
,. Bukan angka ajaib seperti 1 atau 2.Anda selalu bisa membuat file batch. Misalnya, jika program Anda disebut helloworld.exe, beberapa kode akan menjadi:
sumber
Jika Anda menjalankan Windows, maka Anda dapat melakukan
system("pause >nul");
atausystem("pause");
. Itu mengeksekusi perintah konsol untuk menghentikan sementara program sampai Anda menekan tombol.>nul
mencegahnya mengatakanPress any key to continue...
.sumber
Saya meletakkan breakpoint di 0 pengembalian terakhir program. Ini bekerja dengan baik.
sumber
Saya menggunakan
cin.get()
dan itu berhasil tetapi suatu hari saya perlu menggunakan yang laincin.get([Array Variable])
sebelum itu untuk mengambil string ling dengan karakter kosong di tengah. jadicin.get()
jendela command prompt tidak terhindar dari penutupan. Akhirnya saya menemukan cara lain: Tekan CTRL + F5 untuk membuka di jendela eksternal dan Visual Studio tidak memiliki kontrol lagi. Hanya akan bertanya kepada Anda tentang penutupan setelah perintah terakhir dijalankan.sumber
Saya mencoba meletakkan
getchar()
fungsi di bagian akhir. Tapi itu tidak berhasil. Jadi yang saya lakukan adalah menambahkan duagetchar()
fungsi satu demi satu. Saya pikir yang pertamagetchar()
menyerap Enterkunci yang Anda tekan setelah input data terakhir. Jadi cobalah menambahkan duagetchar()
fungsi, bukan satusumber
Alih-alih menekan tombol run, tekan CTRL dan F5 secara bersamaan, itu akan memberi Anda tekan tombol apa saja untuk melanjutkan pesan. Atau ketik "(peringatan gunakan ini hanya untuk menguji bukan program yang sebenarnya sebagai antivirus tidak suka !!!!)" di akhir fungsi utama Anda tetapi: (peringatan gunakan ini hanya untuk menguji bukan program yang sebenarnya sebagai antivirus tidak suka !!!!)
sumber
cukup gunakan cin.ignore () tepat sebelum kembali 0; dua kali
itu saja
sumber
Yang harus Anda lakukan adalah menetapkan variabel untuk x kemudian cukup ketik ini sebelum kembali 0;
sumber
Anda bahkan dapat mendeklarasikan integer di awal
main()
fungsi Anda (katakanlahint a;
) dan letakkanstd::cin >> a;
sesaat sebelum nilai balik. Jadi program akan tetap berjalan sampai Anda menekan tombol dan masuk.sumber