Завершение программы C++
Функция, объявленная exit в , завершает программу C++. Значение, предоставленное в качестве аргумента exit , возвращается операционной системе в качестве возвращаемого кода программы или кода выхода. Принято, чтобы нулевым кодом возврата обозначалось, что программа завершена успешно. Константы EXIT_FAILURE можно использовать, а EXIT_SUCCESS также определенные в , чтобы указать успешность или сбой программы.
Функция abort
Функция abort , объявленная в стандартном формате, включает , завершает программу C++. Разница между exit и abort заключается в том, что exit обработка завершения среды выполнения C++ выполняется (вызывается глобальные деструкторы объектов). abort немедленно завершает программу. Функция abort проходит обычный процесс уничтожения для инициализированных глобальных статических объектов. Также осуществляется обход всей специальной обработки, которая была задана с помощью функции atexit .
Корпорация Майкрософт: по соображениям совместимости Windows реализация abort microsoft может разрешить выполнение кода завершения библиотеки DLL в определенных обстоятельствах. Дополнительные сведения см. в разделе abort .
Функция atexit
Используйте функцию atexit , чтобы указать действия, выполняемые до завершения программы. Перед выполнением функции выхода не инициализированы глобальные статические объекты, инициализированные перед вызовом atexit .
return оператор in main
Инструкция return позволяет указать возвращаемое значение из main . Оператор return в main первую очередь действует как любая другая return инструкция. Все автоматические переменные уничтожаются. main Затем вызывает возвращаемое exit значение в качестве параметра. Рассмотрим следующий пример:
// return_statement.cpp #include struct S < int value; >; int main() < S s< 3 >; exit( 3 ); // or return 3; >
return Операторы exit , описанные в предыдущем примере, имеют аналогичное поведение. Как завершить программу, так и вернуть значение 3 операционной системе. Разница заключается в том, что exit не уничтожает автоматическую переменную s , а return оператор делает.
Как правило, C++ требует, чтобы функции, имеющие возвращаемые типы, отличные от void возвращаемого значения. Функция является исключением. Она main может завершиться без инструкции return . В этом случае он возвращает значение, зависящее от реализации, в вызывающий процесс. (По умолчанию MSVC возвращает значение 0.)
Уничтожение потоков и статических объектов
При вызове exit напрямую (или при вызове после оператора из main ), объекты потоков, связанные с текущим потоком return , уничтожаются. Затем статические объекты уничтожаются в обратном порядке их инициализации (после вызовов функций, указанных в , если таковые имеются atexit ). В следующем примере показано выполнение такого процесса инициализации и удаления.
Пример
В следующем примере статические объекты sd1 создаются и sd2 инициализированы перед записью main . После завершения работы этой программы с помощью инструкции return сначала sd2 уничтожается, а затем sd1 . Деструктор класса ShowData закрывает файлы, связанные с этими статическими объектами.
// using_exit_or_return1.cpp #include class ShowData < public: // Constructor opens a file. ShowData( const char *szDev ) < errno_t err; err = fopen_s(&OutputDev, szDev, "w" ); >// Destructor closes the file. ~ShowData() < fclose( OutputDev ); >// Disp function shows a string on the output device. void Disp( char *szData ) < fputs( szData, OutputDev ); >private: FILE *OutputDev; >; // Define a static object of type ShowData. The output device // selected is "CON" -- the standard output device. ShowData sd1 = "CON"; // Define another static object of type ShowData. The output // is directed to a file called "HELLO.DAT" ShowData sd2 = "hello.dat"; int main()
Другой способ написания этого кода заключается в объявлении ShowData объектов с блоком область, который неявно уничтожает их при выходе из область:
Как остановить ввод в c
Последовательность состоит из чисел которые заканчиваются на 0. Нужно найти максимальное число.Числа которые находятся после 0 учитывать не нужно. Вот написал нахождения максимума, но как сделать чтобы при вводе 0 программа заканчивала ввод дальше.
#include
#include
void main () int x [ 10 ], max , i ;
clrscr ();
puts ( «Vvedite poslidovnist\n» );
for( i = 0 ; i < 10 ; i ++)
scanf ( «%d» ,& x [ i ]);
max = x [ 0 ];
for( i = 0 ; i < 10 ; i ++)
if( x [ i ]> max ) max = x [ i ];>
printf ( «Max=%d\n» , max );
>
Пользователь
Регистрация: 09.04.2011
Сообщений: 30
Немного не ясна постановка задачи:
а) если числа закнчиваются на 0, это такие как:
45380
2340
123405240
и т.д
Или же у вас есть 1 строка с произвольной числовой последовательностью, и нужно из нее выбирая по 1 цифре искать максимум ?
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
for(i=0;i<10;i++) < if (x[i]==0) break; if(x[i]>max) max=x[i]; > printf("Max=%d\n",max);
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| массив з 10 елементов | promt | Общие вопросы C/C++ | 8 | 29.03.2011 11:04 |
| коллекция елементов windows forms | ololo-schoolboy | Windows Forms | 11 | 04.01.2011 09:32 |
| Сортировка елементов из файла. ПАСКАЛЬ! | Kami-sama3 | Помощь студентам | 4 | 20.12.2010 15:35 |
| с++ инициализация статических елементов класса | p_alex | Помощь студентам | 5 | 25.10.2009 16:52 |
| список елементов окна | Програмёр | Общие вопросы Delphi | 1 | 23.02.2008 23:58 |
Как остановить ввод в c
Здравствуйте! Ребят, выручайте, помогите проверить мое решение контрольной работы по программированию, код есть, не могу просто остановить последовательность, вот код первой задачи:
#include int main() < int posl; //элемент последовательности int count_otr=0; int count_pol=0;//счетчик do < scanf("%d",&posl); //если кратно 5, то увелич.счетчик if poslwhile (//как остановить ввод?); if count_pol==count_otr printf("ODINAKOVO"); if count_pol>count_otr printf("POLOJIT BOLSHE, VSEGO: %d ",count_pol); else printf("OTRIC Bolshe, VSEGO: %d ",count_otr); return 0; >
Задача 2, вроде правильно, но не уверен
#include int main() < const int n=150; int a[n]; // int a[n],b[n], так можно писать? int b[n]; int j=1; for (int i=0,ifor (int i=0,i return 0 >
Помогите, пожалуйста, задача на скрине, заранее спасибо!
з.ы. Сорь если раздел не тот, возможно надо было обратиться в «помощь студентам», так что не судите строго
Изображения
| eYsuzkKkaGg.jpg (45.0 Кб, 174 просмотров) |
from dark to light)
Последний раз редактировалось Алексей_2012; 31.10.2014 в 23:25 .
| Алексей_2012 |
| Посмотреть профиль |
| Найти ещё сообщения от Алексей_2012 |
Регистрация: 12.01.2011
Сообщений: 19,500
| Задача 2, вроде правильно, но не уверен |
Что-то странный код.
По-моему там речь о
a[i] = a[i] + b[i];
Ну и для b * вместо +.
Только видимо нужно еще в другой массив сначала скопировать перед вычислением первого (сумма), иначе на втором (произведение) А уже измененный будет.
И про форматирование кода слышал? Хотя бы CTRL+A, CTRL+K, CTRL+F для отступов если Visual Studio.
А то придет min@y со своим бонусом http://programmersforum.ru/showpost. 02&postcount=6
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,262
int neg = 0, pos = 0, a; while (scanf("%d", &a) == 1) < pos += (a >0 && a % 5 == 0); neg += (a
И в if’ах условия нужно писать в скобках.
for (int i = 0; i
for (int i = 0; i
Пишите язык программирования — это форум программистов , а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 31.10.2014 в 23:49 .
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
Ребят, спасибо, у нас все через QT пишется, скачал торрент, но там почему-то только с++ поддерживается, поэтому пишу на листочках :D, на скрине все что в QT, нужно создать консольное С приложение, так что опробовать код смогу только в лабораторке
поясните это, пожалуйста, я решил использовать цикл с постусловием, чтоб ввод данных осуществлялся хотя бы один раз, и, как я понял, последовательность прекращает ввод при условии если ввели А (просто мы так никогда не писали и данный код мне не очень понятен)
int neg = 0, pos = 0, a; while (scanf("%d", &a) == 1) < pos += (a >0 && a % 5 == 0); // если а больше 0 и кратно 5 neg += (a < 0 && a % 5 == 0); // если а меньше 0 и кратно 5. )) >
a[i] = a[i] + b[i];
да, спасибо, а у меня в А массиве получилось бы просто что каждое число на единицу увеличивалось бы, потом на следующем этапе на двойку и т.п., в общем спасибо что поправили, а скомпилировать и проверить не дано , пока 😀
Изображения
| Безымянный.jpg (18.8 Кб, 119 просмотров) |
from dark to light)
Последний раз редактировалось Алексей_2012; 01.11.2014 в 00:07 .
| Алексей_2012 |
| Посмотреть профиль |
| Найти ещё сообщения от Алексей_2012 |
Регистрация: 12.01.2011
Сообщений: 19,500

Последний раз редактировалось Alex11223; 01.11.2014 в 00:09 .
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,262
while (scanf(«%d», &a) == 1) — scanf возвращает количество успешно считанных полей. Считывание происходит, пока не закончится входной поток. Чтобы закончить ввод, нужно, скорее всего, нажать Ctrl+Z и Enter (чтобы программа начала считывать данные).
Пишите язык программирования — это форум программистов , а не экстрасенсов. (<= это подпись ) Участник клуба Регистрация: 20.03.2012 Сообщений: 1,849
Ребят, почему-то не запускается консольное приложение, хотя сборка сборка проходит нормально, вот что пишется:
»
00:45:29: Выполняются этапы для проекта untitled.
00:45:29: Запускается: «C:\Qt\5.3\mingw482_32\bin\qmake.ex e» C:\Users\Алексей\untitled\untitled. pro -r -spec win32-g++ «CONFIG+=debug»
Cannot find file: C:\Users\Алексей\untitled\untitled. pro.
00:45:29: Процесс «C:\Qt\5.3\mingw482_32\bin\qmake.ex e» завершился с кодом 2.
Ошибка при сборке/установке проекта untitled (комплект: Desktop Qt 5.3 MinGW 32bit)
Во время выполнения этапа «qmake»
00:45:29: Прошло времени: 00:00.»
с делфи проще было 😀
Изображения
| Безымянный.jpg (24.5 Кб, 118 просмотров) |
Как остановить ввод с клавиатуры и продолжить выполнение программы (C++)?

Возможно, это оффтоп, но я не нашел подходящей категории для моего вопроса, кроме того, я сижу на Arch Linux. Знаю, что для того, чтобы остановить ввод достаточно нажать Ctrl+D (на винде, к примеру, Ctrl+Z), у меня следующая проблема: имеется программа, в которой нужно ввести два динамических массива (вектора) с клавиатуры. Делаю я это через цикл while (что подразумевает ручное прерывание ввода, иначе заполнять массив можно бесконечно):
1 2 3 4
while (cin >> buffer) { ivec.push_back(buffer); }
После того, как я ввёл нужное количество элементов первого вектора, я нажимаю Ctrl+D, чтобы перейти к вводу элементов второго вектора, но происходит следующее: элементы первого вектора копируются во второй вектор и программа начинает выполняться. Каким образом я могу прервать ввод, чтобы продолжить заполнять второй вектор? Конечно, я могу вводить вектор и через цикл for с ограничением итераций или ввести длину вектора в добавить в тело цикла while условие if, но не хочется мне использовать всякие костыли, хочу все-таки выяснить, возможно ли вводить несколько массивов с остановкой ввода в терминале Linux.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как продолжить выполнение программы?
Необходимо запустить wav файл и продолжить выполнение программы. PlaySound(TEXT("1.wav"), NULL.

Остановить и продолжить выполнение метода. Общий поток при этом должен ожидать
Всем привет! Есть метод 1, который выполняется и останавливается в процессе, затем выполняется.

Как продолжить выполнение программы после точки останова?
Допустим, я останавливаю выполнение программы на строчке (точка останова 1). Что нажать, чтобы.
Как продолжить выполнение программы после обработки исключения?
Как вернуться к выполнению программы, если переменная был введена в неправильном формате? Где-то.
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
1 2 3 4 5 6
while (std::cin >> n) v1.push_back(n); std::cin.clear(); while (std::cin >> n) v2.push_back(n);
Регистрация: 05.04.2019
Сообщений: 14
Увы, но не помогло. Продолжает копировать элементы первого массива во второй, хотя нет, даже не элементы первого вектора, а сам результат выполнения программы. Программа состояла в том, чтобы удалить все отрицательные элементы из двух векторов, затем соединить из в один вектор и найти минимальный элемент в этой последовательности (все последующие дубликаты минимального элемента удалить). Так вот, если ввести отрицательные элементы в первый вектор, то во втором их уже нет. Странно как-то вроде программа должна сверху вниз построчно выполняться. Наверное дело в моем коде. Программа у меня пока недоработана и работает неправильно, я собираюсь ее исправить, но сначала мне бы разобраться с заполнением векторов. Вот код программы (знаю, что неправильно и неэффективно):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
#include #include // #include using namespace std; int main() { vector float> fvec1; vector float> fvec2; vector float> :: iterator p; // vector :: iterator q; float buffer; // storing user's input as the first vector cout <"fvec1: " ; while (cin >> buffer) { fvec1.push_back(buffer); } cin.clear(); // storing user input's as the second vector cout <"fvec2: " ; while (cin >> buffer) { fvec2.push_back(buffer); } p = fvec1.begin(); // q = fvec2.begin(); fvec1.insert(fvec1.end(), fvec2.begin(), fvec2.end()); for (auto p = fvec1.begin(); p != fvec1.end();) { if (*p 0) { p = fvec1.erase(p); } else p++; } for (p = fvec1.begin(); p != fvec1.end(); p++) { cout <*p <" "; } cout ; // finding the minimum element // auto min = *in_element(fvec1.begin(), fvec1.end()); auto min = *fvec1.begin(); for (auto p = fvec1.begin(); p != fvec1.end();p++) { if (*p min) { min = *p; } } cout <"min = " ; /* finding the position of the first minimum * element (if there are more than 1) */ auto q = fvec1.begin(); for (auto p = fvec1.begin(); p != fvec1.end(); p++) { if (*p == min) { break; } } // removing duplicate minimum values for (p; p != fvec1.end();) { if (*p == min) { p = fvec1.erase(p); } else p++; } cout <"RESULT: " ; for (int i = 0; i fvec1.size(); i++) { cout [ i] <" "; } cout ; return 0; }
Вот результат работы программы:
fvec1:
12
-1
0.002
[Ctrl+D]
fvec2:
12 0.002 (это было выведено автоматически)
min = 0.002
RESULT:
12 0.002