Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
 Аватар для Japanese
9 / 9 / 1
Регистрация: 14.11.2010
Сообщений: 148

Небольшая странность в "Hello World!"

19.11.2010, 06:53. Показов 2732. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал изучать C++ по учебнику "Джесс Либерти - Освой самостоятельно С++ за 21 день"
И сразу же столкнулся с проблемой:
в книге имеется исходник программы "Hello World!", автор говорит что после компиляции и запуска программа должна вывести на экран в дос окне слова "Hello World!"
этого не произошло. Окно появилось и сразу закрылось.
Вот исходник из книги:
C++
1
2
3
4
5
6
7
8
9
10
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int main()
{
    cout<<"Hello World!\n";
    return 0;
}
Тогда я заместо
C++
1
return 0;
вставил
C++
1
_getch();
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
 
int main()
{
    cout<<"Hello World!\n";
    _getch();
}
Программа не закрылась из-за того что
C++
1
_getch()
ждал нажатия любой клавиши.

Так вот мне непонятно одно: если автор написал в своем исходнике
C++
1
return 0;
это значит что у него программа сразу не закрылась? Если так, то почему же у меня закрывается при использовании
C++
1
return 0;
?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2010, 06:53
Ответы с готовыми решениями:

Небольшая странность с .htaccess
Здравствуйте, уважаемые форумчане! Есть index.php в котором: &lt;?php echo $_GET; ?&gt; Ввожу в адресную строку: ...

небольшая странность гляньте если не трудно
всем привет итак у меня системник aser aspire M3100 мать aser F690GVM которая держит до 8гб оперативки в базовой сборке стояло две платы...

Небольшая консультация и небольшая оценка продвижения
Желательно с опытом продвижения в забугорье(геотаргетинг,буржуйский гугл,буржуйские биржы)...и желательно с хорошим опытом,а то начнут мне...

10
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.11.2010, 07:22
Цитата Сообщение от Japanese Посмотреть сообщение
Так вот мне непонятно одно: если автор написал в своем исходнике
C++
1
return 0;
это значит что у него программа сразу не закрылась?
Это значит то, что консольные приложения надо запускать из консоли, а не из винды, и тогда окошко закрываться не будет
Цитата Сообщение от Japanese
Если так, то почему же у меня закрывается при использовании
C++
1
return 0;
?
Она закрывается не из-за этой строки, а из-за того, что программа завершает свою работу. Увидел ты результат или нет - это уже никого не волнует
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
19.11.2010, 11:05
И вообще, хотя если программа не наталкивается на return 0;, она и считает, что завершилась успешно, всё же стоит явно возвращать код завершения. Заменять не надо было, надо было вставить перед return 0; вашу _getch(); А вообще в плюсах лучше бы использовать std::cin.get();, хотя бы потому, что отпадает необходимость подключать лишний хидер.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
19.11.2010, 14:17
Цитата Сообщение от silent_1991 Посмотреть сообщение
стоит явно возвращать код завершения.
Ты что имеешь в виду? Если exit, то он в плюсплюсе не приветствуется.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
19.11.2010, 17:22
Он имеет в виду return в main. Оно передаёт код возврата не хуже exit.
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
19.11.2010, 17:55
return это просто возврат из функции в основной код, а не передача кода возврата (хотя для main можно и так сказать )..

В коде примерно так
Функция маин
Assembler
1
2
3
4
5
;код функции.
;...
;return 0;
xor eax, eax ; это 
ret            ; return 0;
После return попадем в основной код..
Assembler
1
2
3
4
5
6
7
8
9
...
call main              ; здесь вызвали main
add esp, что там.. ; сюда после ret кинет
...
mov [mainret], eax ; запишет значение которое вернула функция main
...
push eax ; eax просто не менялся
call exit   ; вызвали exit(0);
; дальше в ntdll.dll скорее всего попадем и там программа умрет..
exit(0) или ExitProcess(0) окончательный выход из программы..
Для С++ не желательно их явно вызывать т. к. деструкторы классов не будут вызваны..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
class foo{
public:
    foo() { std::cout << "foo::foo()\n"; }
    ~foo() { std::cout << "foo::~foo()\n"; }
};
int main()
{
    foo a;
 
    exit(0);
 
    return 0;
}
На экране только это увидим..
foo::foo()
2
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
19.11.2010, 19:49
Так почему бы тогда в этой раззамечательной лекции не написать и о том, что мы можем не только увидеть что-то на экране, но и получить значение кода возврата в переменной окружения %ERRORLEVEL% и даже использовать его - и это всё после того, как программа уже завершилась? И что этот самый код задаётся не только через тот самый нежелательный вызов exit, но и при выполении return внутри main, о чём вам впустую твердят уже который пост?
0
 Аватар для Ntsket
2 / 2 / 0
Регистрация: 20.11.2010
Сообщений: 19
20.11.2010, 05:40
Japanese,
По такой же книжечке занимаюсь, там после кода программы автор как раз описывает проблему с "закрыванием" и после описания проблемы и ее причинах говорит, что нужно добавить еще кусок кода перед оператором return, выглядит этот кусок примерно так (под рукой книжки нет):
C++
1
2
char response;
std::cin >> response;
0
21.11.2010, 16:58
 Комментарий модератора 
Обсуждение литературы не в этой теме.
А принцип "Не читал, но осуждаю" на форуме не приветствуется
0
 Аватар для tabber
37 / 41 / 3
Регистрация: 10.10.2010
Сообщений: 364
21.11.2010, 19:30
Japanese,
Во первых, надо в таком случае построить приложение, и запустить его без откладки!
поскольку вы компилируете файл не для конечного результа и в среде он сам захлопывается поскольку все сделал и ему ** что дальше=)
Ну если вам всеже надо с откладкой то вставь после ретурна -
C++
1
system ("Pause")
Вам книжку по английскому языку сначала надо D тут ежик поймет что ретур это возврат=)
C++
1
2
3
#include "stdafx.h"
#include <iostream>
#include <conio.h>
зачем вы ставите .h если указали область видимости std!?
C++
1
using namespace std;
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.11.2010, 03:51
Цитата Сообщение от tabber Посмотреть сообщение
зачем вы ставите .h если указали область видимости std!?
А это тут к чему? Если ты намекаешь, что в С++ стандартные хедеры без расширения, то хочу заметить, что для сишного conio.h нет аналога в С++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2010, 03:51
Помогаю со студенческими работами здесь

ярлыки world of tanks и world of warships на рабочем столе
помогите удалить просканировал системы с помощью Farbar Recovery Scan Tool, файлы FRST.txt и Addition.txt прикрепил к сообщению

Поменять слова местами то есть Hello World > World Hello C++
Ребят всем привет помогите решить задачку: Имеется предварительно созданный текстовый файл, содержащий строку &quot;Hello World&quot;....

Программа должна работать корректно и вставить слово "Beautiful" перед словом "World" в строке "Hello World"
скажите в чём ошибка вроде код работает верно компилируется и линкуется но когда запускаю то ничего просто пусто .MODEL SMALL .STACK 100h...

Странность
#include &lt;stdio.h&gt; void quicksort(int *arr, int b, int e) { int l = b, r = e; int ipiv = (l + r)/2; int piv = arr;...

Странность
Вобщем, дело такое, есть жесткий диск в ноутбуке, рабочий, сейчас используется, его история очень богата: Он пережил убийство его...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru