Существует проблема, которую не могу уже решить дня 2 минимум. Чем объявлять system("pause") в C++? Пробовал и <windows>, и <stdlib>, и <conio.h>, весь гугл обшарил, даже на getchar() пробовал заменить system, но после отладки проги консоль в упор закрывается :(
-
М-м-да... Смешать <stdlib.h> и
... Это надо еще уметь... Напишите что-то одно из них, и ставьте system("pause"). – 3JIoi_Hy6 Oct 17 '11 at 17:47
9 Answers
Прекратите заниматься ерундой с вписыванием в код каких-то system("pause") и прочего мусора. Ничего подобного в консольном приложении быть не должно.
Если вы занимаетесь разработкой консольного приложения под MS Visual Studio, то идите в настройки проекта, раздел Linker и установите настройку SubSystem в значение CONSOLE
После чего возьмите в привычку запускать свое приложение не в отладочном режиме ("Start Debugging", F5), а в режиме "без отладчика" ("Start Without Debugging", Ctrl+F5). Консольное окно в таком случае не будет закрываться само, а будет оставаться на экране до следующего нажатия клавиши.
Запуск же программ под отладчиком (F5) предназначен для ситуаций, когда у вас в коде есть точки останова, т.е. при запуске под отладчиком вас проблема автоматического закрытия окна волновать не должна вообще.
В VS2017, начиная с определенной версии, появилась опция отладчика, которая предотвращает закрытие консольного окна по завершении программы, независимо от того, запускали ли вы вашу программу в режиме отладки
- 69,346
Внимание! Правильный ответ на вопрос был уже дан пользователем Андрей: функция system объявлена в заголовочном файле cstdlib (или stdlib.h). Пожалуйста, не добавляйте новых ответов вида "я подключил N и все заработало", где N - очередной заголовок, косвенно включающий cstdlib.
В Microsoft Visual Studio, например, при запуске по Ctrl+F5, IDE сама будет запускать программу, как будто бы в ней ожидается ввод в конце.
Еще варианты решения:
MS-овскаяфункция_getch()из<conio.h>std::cin >> c, гдеc- этоchar c. Правда, придется нажимать еще иenter.Breakpointна закрывающей скобкеint main(...) { }.- Можно еще что-нибудь придумать.
- 1,865
- 23,562
Нужно подключать библиотеку cstdlib, т.к. system объявлена в ней.
#include <cstdlib>
-
Пожалуйста, опишите решение проблемы более детально, чтобы пользователям было легче понять ваш ответ. Для редактирования ответа, нажмите [Edit]. Так же можете ознакомиться с советами о том, как написать хороший ответ. - Из очереди проверок – Yuri Mar 08 '17 at 19:07
Скорее всего, вызов getchar() не срабатывает из-за того, что в буфере ввода уже есть некий символ. Обычно это перевод строки, оставшийся от scanf. Поэтому надо прочитать сначала его, а уже потом ещё один, который нажмёт пользователь:
getchar(), getchar();
Ну и естественно, это дело надо удалить, как только оно перестанет быть нужным.
PS: Если при вводе пользователь перед enter'ом нажмёт пробел, то всё равно не сработает.
- 123,725
//попробуй так-действие тожесамое
#include<iostream>
using namespace std;
int main(){
...
cout << "Для продолжения нажмите Enter\n";
cin.get();//можно несколько раз, для верности
return 0;
}
- 1,823
-
что-то не работает замена скобок: #include (iostream.h) вместо () поставьте нормальные скобки. – чипик Oct 30 '11 at 10:54
-
#include <iostream>
using namespace std;
Как же вы товарищ самую стандартную библиотеку iostream -то не попробовали??? Она ещё cin cout и cerr позволяет использовать (может вы не знаете), а глядя на подсказки интеллисенса (он для C++ появился в VS2012) у неё вообще много чего есть (вернее конкретно в std). PS: для новичков: студийную библиотеку надо подключать в коде после не-студийных, а то так и будет писать типа "переменная system не найдена ..." - сами виноваты. Это ведь C++ ёкарный бабай.
- 76
попробуй Директиву #include<stdio.h>
и вставь system("pause\n");
Для оператора getch(); директива #include <conio.h>!
- 8,602
-
systemне должна находиться вstdio.h. Даже не знаю, в VS может такое сработать или нет, но в других - точно нет. – Qwertiy Jan 11 '19 at 23:18
У меня такая проблема решилась вот так
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
cout << "После выполнения, вaс ожидает пауза" << endl;
system("pause");
return 0;
}
Т.е. нужно добавить входные аргументы для функции main(), а именно
int main(int argc, char **argv)
{
}
- 1
-
Это может сработать только в VS, да и то не факт, что во всех версиях. – Qwertiy Jan 11 '19 at 23:17

