Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/198: Рейтинг темы: голосов - 198, средняя оценка - 4.86
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
1

Что означает команда exit(1) ?

12.10.2011, 13:05. Показов 38612. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Привожу кусок кода из учебника:
Функция добавления элемента в очередь:
C++
1
2
3
4
5
6
void Add(int Last, int number)
{
    if (Last==maxqueue) exit(1); //Очередь полна
    Queue[Last]=number; //Добавляет элемент number в очередь
    Last++; //Сдвигает указатель Last на один элемент вправо
}
Меня интересует строчка №3. Что здесь означает команда exit(1) ? И вообще что она означает? Мне просто казалось, что это есть команда завершения всей программы. А по идее должно быть так: мы находимся внутри main(), какие-то там команды выполняются. Потом доходим до функции void Add(int Last, int number). Управление передаётся на неё. Там вначале должна стоять проверка, если очередь уже полна, то следующие команды (а именно строчки 4 и 5) не должны выполняться, мы должны выйти из функции Add обратно в функцию main(). Но в приведённом коде мне кажется мы вообще всю программу завершим, так как там стоит exit(1). Или я что-то не правильно понимаю? Просто я читаю книгу, в которой куча опечаток и ошибок. Здесь, мне кажется, вместо exit(1) должно стоять что-то другое.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2011, 13:05
Ответы с готовыми решениями:

Поясните пожалуйста что означает двоеточие и то что идет после него
В 4 строчке после параметра в скобочках нету ";" или же тела функции, что не сходится с моим...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что?
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все...

Что означает запись в скобках и что возвращает return
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код...

ошибка Id returned 1 exit status что может значить?
при компиляции программы выдается такая ошибка undefined reference to "WinMain@16" Id...

19
104 / 105 / 18
Регистрация: 18.08.2012
Сообщений: 308
12.10.2011, 13:08 2
exit(1)
1-выход когда всьо нормально завершылось
0-с ошыбками
0
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 13:22 3
Mr.kto, наоборот, exit(0) или exit(EXIT_SUCCESS) - это успешное завершение
exit(1) - завершение с кодом ошибки 1


Alex Z, там вполне может стоять что-то другое, например, генерация исключений. Но автор книги выбрал именно такой подход - при невозможности выполнить какую-то операцию завершать работу программы аварийно с кодом 1. Может, потому, что в учебниках обычно исключения рассматривают позже

Раз у тебя функция типа void, можно было вообще написать что-то такое
C++
1
2
3
4
5
6
7
8
9
10
void Add(int Last, int number)
{
    if (Last==maxqueue) cout<<"Очередь полна!\n"; //Очередь полна
    else
    {
        Queue[Last]=number; //Добавляет элемент number в очередь
        Last++; //Сдвигает указатель Last на один элемент вправо
        cout<<"Элемент добавлен!\n";
    }
}
2
104 / 105 / 18
Регистрация: 18.08.2012
Сообщений: 308
12.10.2011, 13:24 4
ХЗ мож
0
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
12.10.2011, 13:41  [ТС] 5
Всё, понял, спасибо.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
12.10.2011, 14:45 6
Alex Z, это образец очень плохого проектирования:
Во-первых функция, намертво привязанная к некоторому глобальному объекту - уже крайне сомнительное решение.
Во-вторых функция в случае ошибки должна о ней сигнализировать, а не принимать решение о завершении программы. То есть логичнее было бы объявить её булевого типа и возвращать TRUE, если функция отработала, и FALSE, если не смогла. Ну или в С-стиле
C
1
2
3
4
5
6
int func(type_t some_params){
    /*...*/
    if ( something_is_wrong )
        return -1;
    return 0;
}

Цитата Сообщение от aeshes Посмотреть сообщение
Раз у тебя функция типа void, можно было вообще написать что-то такое
Вот так как-раз тоже лучше не делать - во-первых для сообщения об ошибках есть поток cerr (stderr), который в отличии от cout не имеет обыкновения буферизироваться, то есть может сложиться ситуация, что сообщение просто не выведется; во-вторых программа-то что дальше должна делать? Продолжать выполняться не смотря на то, что функция не отработала, как должна бы?
0
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 15:14 7
easybudda, я же не говорю, что так надо делать

Тут еще у меня вопрос: какой смысл в операции Last++, если мы Last передаем по значению, а не по ссылке? Что мы хотим таким образом менять? Это вообще правильно?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
12.10.2011, 15:17 8
Цитата Сообщение от aeshes Посмотреть сообщение
Что мы хотим таким образом менять? Это вообще правильно?
Нет, это тоже ересь. Либо Last - тоже глобальная переменная, тогда её незачем было бы передавать парпметром, либо изменённое значение сразу же потеряется при выходе из функции.

Цитата Сообщение от Alex Z Посмотреть сообщение
Привожу кусок кода из учебника:
Что за учебник такой?
1
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.10.2011, 15:17 9
Либо там рекурсивный вызов нужен, тогда можно просто инкрементировать, а так логично через адрес работать. Вообще странная функция.
0
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 15:20 10
наверное, если б Last был глобальным и не передавался, тоже бы работало

Не по теме:

действительно странный какой-то учебник

0
Заблокирован
12.10.2011, 15:42 11
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void f(int arg)
{
    arg *= arg;
}
 
int main(){
    int x = 10;
    printf("%d\n", x);
    f(x);
    printf("%d\n", x);
    return 0;
}
0
easybudda
12.10.2011, 16:02
  #12

Не по теме:

alkagolik, а если строки с int main и int x местами поменять? ;)

0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
12.10.2011, 16:05 13
easybudda, а что изменится?
0
Заблокирован
12.10.2011, 16:11 14
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int x = 10;
 
void f(int arg)
{
    arg *= arg;
}
 
void f2()
{
    x *= x;
}
 
int main(){
    printf("%d\n", x);
    f(x);
    printf("%d\n", x);
    f2();
    printf("%d\n", x);
    return 0;
}
Код
~/documents/projects/system/bin/Debug$ ./system 
10
10
100
0
easybudda
12.10.2011, 16:15
  #15

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
easybudda, а что изменится?
ни-че-го... :)

0
fasked
12.10.2011, 16:16
  #16

Не по теме:

easybudda, а я уж было начал заподазривать неладное :D

0
Заблокирован
12.10.2011, 16:19 17
такой вариант тоже ничего не меняет, но наверняка может под ребро вставить как-то
C
1
2
3
4
5
6
int x;
 
void f3(int x)
{
    x *= x;
}
0
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
18.10.2011, 09:16  [ТС] 18
Цитата Сообщение от easybudda Посмотреть сообщение
Что за учебник такой?
Называется "М. Динман - С++. Освой на примерах". Издание 2006 года. Он вроде написан для Borland C++ 5.02.
Я когда приводил примеры из него, то мне на многих форумах писали, что книга плохая, но у меня нет другой. Все советуют "Либерти - С++ за сколько то дней (не помню за сколько)", но в магазине такой книги нет, а читать с монитора мне неудобно.
0
solar_wind
18.10.2011, 09:33
  #19

Не по теме:

Да вы ничего не понимаете...это наверное редакторы случайно название у книжки обраезали, а на самом деле она называется "Освой на примерах как не нужно писать программы". Новая методика, поставить ученику столько граблей, что бы ему ничего не оставалось как самому во всем разобраться )

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
18.10.2011, 11:03 20
Alex Z, список литературы. В любом мало-мальски вменяемом книжном что-нибудь, да подберёте.
1
18.10.2011, 11:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2011, 11:03
Помогаю со студенческими работами здесь

Что такое #, include, что это означает
______

Что означает команда reset?
For i = 1 To n Picture5.Print x(i) Print f = Str(x(i)) ...

Что означает команда send to ' '
что означает это: send to ' ';

Что означает эта команда?
app.UseIsOperator(g);


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru