Saya memulai dengan Visual C ++ dan saya ingin tahu bagaimana cara menjaga jendela konsol.
Misalnya ini adalah aplikasi "hello world" yang khas:
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
Apa garis yang saya lewatkan?
visual-c++
console
Raúl Roa
sumber
sumber
Jawaban:
Mulai proyek dengan Ctrl+F5alih - alih adil F5.
Jendela konsol sekarang akan tetap terbuka dengan
Press any key to continue . . .
pesan setelah program keluar.Perhatikan bahwa ini memerlukan
Console (/SUBSYSTEM:CONSOLE)
opsi tautan , yang dapat Anda aktifkan sebagai berikut:CTRL-F5 dan petunjuk subsistem bekerja bersama; mereka bukan opsi yang terpisah.
(Atas perkenan DJMorreTX dari http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )
sumber
cin.get(),getchar(), system("pause")
atau sampah lain. Mengubah ini berfungsi.system("pause");
di akhir kode Anda. Masuk akal dan bekerja dengan baik.Cara standar adalah
cin.get()
sebelum pernyataan pengembalian Anda.sumber
_tmain
. Saya akan memilih -1 lain untukcin.get()
bukannya menempatkan breakpoint untuk F5 atau menggunakan Ctrl F5. Tapi saya hanya diizinkan satu downvote._tmain
? Itulah cara standar untuk menulis aplikasi Windows yang menargetkan subsistem Konsol. Menyimpang dari standar itu adalah praktik yang buruk. Jelas, tidak ada yang berbicara tentang kode portabel di sini; pertanyaannya mengatakan Visual C ++ dan_tmain
merupakan tanda tangan yang muncul dalam kode sampel. Sudah waktunya untuk melepaskan agama ini. Windows "non-standar" secara default, dan ada alasan yang sangat baik untuk mengikuti nya standar._tmain
adalah karena ini benar-benar tidak perlu ( standar C ++ internasional membutuhkan yang sederhanamain
), dan karena menggunakanT
skema makro Microsoft , yang merupakan komplikasi dan bertele-tele yang tidak perlu untuk mendukung Windows 9x. Jika Anda merasa menyimpang dari standar adalah praktik yang buruk, maka Anda harus benar-benar tidak menggunakannyatmain
. Tidak ada alasan yang baik untuk menggunakantmain
, kecuali untuk trolling atau, untuk profesional, untuk menampilkan ketidakmampuan total seseorang.Letakkan breakpoint pada
return
telepon.Anda menjalankannya di debugger, bukan?
sumber
Pilihan lain adalah menggunakan
Meskipun ini tidak terlalu portabel karena hanya akan bekerja pada Windows, tetapi ini akan secara otomatis dicetak
sumber
system
dinyatakan dalam<stdlib.h>
.Untuk proyek makefile, solusi yang diterima gagal, karena bug di Visual Studio (yang hadir setidaknya hingga versi 2012 - saya belum menguji 2013). Bug ini dirinci di sini .
Untuk menghentikan konsol setelah penghentian program pada proyek makefile, lakukan langkah-langkah ini (ini mungkin berbeda untuk versi selain 2010 - 2012):
1) Lulus- EDIT : lihat di bawah./SUBSYSTEM:CONSOLE
ke tautan.2) Buka file proyek Anda (.vcxproj) dalam editor teks.
3) Di dalam
<project>
tag root , masukkan yang berikut ini:4) Muat ulang proyek dalam solusi Anda.
5) Jalankan program tanpa debugging (CTRL + F5).
EDIT:
Seperti komentar saya di bawah ini, pengaturan opsi tautan
/SUBSYSTEM:CONSOLE
sebenarnya tidak relevan untuk proyek makefile (dan bahkan belum tentu mungkin, jika Anda menggunakan kompiler selain MSVC). Yang penting adalah bahwa pengaturan ditambahkan ke file .vcxproj, seperti langkah 3 di atas.sumber
/SUBSYSTEM:CONSOLE
ke linker sebenarnya tidak relevan - langkah 3 adalah yang terpenting. Ingat jawaban saya berkaitan dengan proyek makefile - dalam proyek makefile, IDE tidak memiliki cara untuk mengetahui apa yang Anda sampaikan ke linker (Anda bahkan mungkin tidak menggunakan kompiler yang memiliki/SUBSYSTEM:CONSOLE
opsi), dan itu adalah proyek sendiri yang melacak apakah itu dimaksudkan untuk menjadi program konsol. Saya akan mengedit jawaban saya sesuai.Anda dapat menggunakan
cin.get();
ataucin.ignore();
tepat sebelum pernyataan pengembalian untuk menghindari jendela konsol tertutup.sumber
cukup letakkan breakpoint pada braket keriting terakhir utama.
ini berfungsi untuk saya, tidak perlu dijalankan tanpa debugging. Ia juga mengeksekusi destruktor sebelum mengenai breakpoint sehingga Anda dapat memeriksa pesan apa pun yang dicetak pada destruktor ini jika ada.
sumber
Cukup tambahkan Breakpoint ke braket penutup
_tmain
metode Anda . Ini adalah cara yang lebih mudah plus Anda tidak perlu menambahkan kode untuk melakukan debug.sumber
Tempatkan breakpoint pada penjepit akhir
main()
. Itu akan tersandung bahkan dengan beberapareturn
pernyataan. Satu-satunya downside adalah bahwa panggilan untukexit()
tidak ditangkap.Jika Anda tidak men-debug, ikuti saran dalam jawaban Zoidberg dan mulai program Anda dengan Ctrl+ F5alih-alih adil F5.
sumber
2 Sen Saya:
Pilihan 1: Tambahkan breakpoint di akhir
main()
Pilihan 2: Tambahkan kode ini, tepat sebelum
return 0;
:Anda harus memasukkan
<iomanip>
untukstd::numeric_limits
sumber
tambahkan saja sistem ("jeda") di akhir kode sebelum mengembalikan 0 seperti ini
sumber
sumber
cin.get()
, atausystem("PAUSE")
. Saya belum pernah mendengar Anda bisa menggunakannyareturn(0);
sumber
Saya sertakan
#include <conio.h>
dan kemudian, tambahkangetch();
tepat sebelumreturn 0;
baris. Itulah yang saya pelajari di sekolah. Metode yang disebutkan di atas sangat berbeda.sumber
Punya masalah yang sama. Saya menggunakan
_getch()
tepat sebelum pernyataan kembali. Berhasil.sumber
(Beberapa opsi dapat dipanggil dengan nama yang berbeda. Saya tidak menggunakan versi bahasa Inggris)
Saya memiliki masalah yang sama, ketika saya membuat proyek dengan opsi "proyek kosong", Buat proyek sebagai "aplikasi konsol Win32" alih-alih "proyek kosong". Dalam dialog yang muncul sekarang, Anda menekan "lanjutkan" dan setelah itu Anda dapat memeriksa opsi "kosongkan proyek" dan tekan konfirmasi. Setelah itu CTRL + F5 akan membuka konsol yang tidak menutup secara otomatis.
sumber
Saya memiliki masalah yang sama; Dalam aplikasi saya ada beberapa titik keluar () poin dan tidak ada cara untuk mengetahui di mana tepatnya keluar, maka saya menemukan hal ini:
atau
Dengan cara ini akan berhenti di mana pun kita keluar di program.
sumber
atexit
.atexit
mengambil pointer fungsi, bukan bilangan bulat.Pilihan lain:
Di utama:
sumber
Sebenarnya, solusi sebenarnya adalah pemilihan templat proyek itu sendiri. Anda HARUS memilih Aplikasi Konsol Win32 di VS yang lebih lama, atau mengisi nama proyek terlebih dahulu kemudian klik dua kali pada Windows Desktop wizard dan kemudian pilih aplikasi konsol Win32. Kemudian pilih proyek kosong pada titik ini. Ini kemudian memungkinkan untuk apa yang benar-benar diinginkan penanya tanpa menambahkan titik pemberhentian tambahan dan menyimpan kode. Saya juga mengalami masalah ini. Jawabannya juga ada di situs MSDN.
sumber
Berikut adalah cara untuk menjaga jendela perintah tetap terbuka terlepas dari bagaimana eksekusi berhenti tanpa mengubah kode apa pun:
Di Visual Studio, buka Halaman Properti Proyek -> Debugging .
Untuk Perintah , masukkan
$(ComSpec)
Untuk Argumen Perintah , masukkan
/k $(TargetPath)
. Tambahkan argumen apa pun ke aplikasi Anda sendiri.Sekarang F5 atau Ctrl-F5 mengeksekusi Windows / System32 / cmd.exe di jendela baru, dan / k memastikan bahwa prompt perintah tetap terbuka setelah eksekusi selesai.
Kelemahannya adalah eksekusi tidak berhenti pada breakpoints.
sumber
Seperti yang telah ditunjukkan oleh beberapa orang, solusi Zoidberg tidak melampirkan debugger, yang biasanya tidak Anda inginkan.
Opsi imo terbaik adalah untuk mengkonfigurasi VS Anda sesuai (dari VS 2017 dan seterusnya), dengan pergi ke Tools> Options> Debugging> General. Di sana Anda menghapus centang "Secara otomatis menutup konsol ketika debugging berhenti" (di bagian paling bawah), yang mungkin diperiksa dalam kasus Anda.
sumber
Anda bisa menaruh keep_window_open (); sebelum kembali ke sini adalah salah satu contoh
sumber