Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
#1

Pseudo_Game - C++

15.08.2010, 11:52. Просмотров 2244. Ответов 40
Метки нет (Все метки)

Привет народ. Я со вчерашнего дня начал изучать C++ (после нескольких месяцем занятий BASICом),
имею такую задачку:
При нажатии esc вывести на экран значение x, и только после этого чтоб можно было закрыть
консоль нажатием любой клавиши.
Я никак не пойму почему оператор switch выполняется когда ChkExit = 0, а else не выполняется.


C++
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
#include <iostream>
#include <conio.h>
#include <clocale>
 
using namespace std;
 
int main()
{
    char act;
int ch;
int x = 0; int y = 0;
bool ChkExit = 1;
 
setlocale(LC_CTYPE,"Russian");
    
while(1)
{
act = _getch();
ch = static_cast<int>(act);
if(ChkExit = 1)
{
    switch(ch)
    {
        case -32:
            break;
 
        case 27:
            ChkExit = 0;
            cout << "ChkExit = " << ChkExit << "\n";
            cout << " x = " << x << "\n";
            //exit(0);
            break;
 
        case 77:
            cout << "Направо.\n";
            x += 1;
            break;
 
        default:
            cout << "Не та клавиша.\n";
    }
  }
else if(ChkExit = 0)
cout << "y = " << y << "\n";
}
    
}
Помогите пожалуйста чайнику.
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 07:02 #16
Цитата Сообщение от Lavroff Посмотреть сообщение
alexzak, Руками всегда лучше. Всегда найдутся компиляторы, которые не возвращают ноль по дефолту, не из ТОП-овых конечно, но как знать с чем придется работать. Приучает к порядку. Понятнее, что функция возвращает код успешного выполнения программы явно, нежели неявно. Хватит?
Это все субъективно. Найди хоть один компилятор, выпущенный в последние 10 лет, где это не работает. Мне больше кажется, что ты просто не знал этого факта, а теперь пытаешься найти своему незнанию оправдание.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.08.2010, 07:04 #17
alexzak, Знал. И знаю. И этот факт незачем использовать. Стоит возвращать ноль, хотя бы потому, что функция int main(). Не хотите возвращать пишите void main().
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 07:07 #18
Цитата Сообщение от Lavroff Посмотреть сообщение
alexzak, Знал. И знаю. И этот факт незачем использовать. Стоит возвращать ноль, хотя бы потому, что функция int main(). Не хотите возвращать пишите void main().
Ну, вот ты и показал свое незнание. Стандарт четко определяет прототип main. И 'void main()' там никакого нет. Компилятор, соответствующий стандарту откажется компилировать 'void main()'. Стандарт читал хоть раз?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.08.2010, 07:08 #19
alexzak, Поглядывал. Возможно не знаю. Только void main() вполне нормально компилится. В современных компиляторах. Что далее?
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 07:11 #20
Цитата Сообщение от Lavroff Посмотреть сообщение
alexzak, Поглядывал. Возможно не знаю. Только void main() вполне нормально компилится. В современных компиляторах. Что далее?
Очевидно, тебе пофиг на то, что правильно. Иначе ты бы не сказал, что void main вполне нормально.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.08.2010, 07:13 #21
alexzak, Нормально - не значит правильно. Нормально - значит жуется компилятором.
А вот возвращать ноль - это правильно. Не возвращать это нормально. Но не правильно. int функции обязаны возвращать значение. Почему бы не написать одну строку кода лишнюю, чтобы было ПРАВИЛЬНО?
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 07:18 #22
Цитата Сообщение от Lavroff Посмотреть сообщение
alexzak, Нормально - не значит правильно. Нормально - значит жуется компилятором.
А вот возвращать ноль - это правильно. Не возвращать это нормально. Но не правильно. int функции обязаны возвращать значение. Почему бы не написать одну строку кода лишнюю, чтобы было ПРАВИЛЬНО?
Делай "правильно", кто тебе мешает. Только твои критерии правильности немного не соответствуют действительности.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.08.2010, 07:19 #23
alexzak, Большинство программистов возвращают ноль из main. Большинство мировых специалистов советует возвращать ноль, говоря, что это правильно. Вам мало?
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 07:21 #24
Цитата Сообщение от Lavroff Посмотреть сообщение
alexzak, Большинство людей возвращают ноль из main. Большинство мировых специалистов советует возвращать ноль, говоря, что это правильно. Вам мало?
Безосновательное заявление. Где факты?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.08.2010, 07:30 #25
alexzak, Цитата из Шилдта:
На практике многие компиляторы языка С/С++ по умолчанию возвращают число 0, но полагаться на это не стоит, поскольку это снизит машинонезависимость вашей программы.
Страуструп:

Целое значение, возвращаемое main(), если оно вообще возвращается предназначается "для системы". Если не возвращается никакого значения, система получает значение, означающее успешное завершение.
И оба они пишут программы в своих книгах с return 0 в конце. Если бы этого не было нужно - не писали бы наверное. Так что это верно.
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 07:42 #26
Шилдт просто балбес, мы его пропустим. У него много чего просто неправильно, начиная от мелких опечаток, кончая дизинформацией. А Страуструп правильно пишет, "Если не возвращается никакого значения, система получает значение, означающее успешное завершение." О чем я тебе и говорил. У него же самая первая программа в книге:
Код
#include <iostream>
int main()
{
    std::cout << "Hello, new world!\n";
}
return 0 в конце main у него нигде в книге не встречается. Может ты и Страуструпа не читал? Можешь не отвечать. Вопрос риторический.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.08.2010, 07:49 #27
alexzak, Не читал. Читаю. Однако, про Шилдта слишком резко. Он вполне себе признанный специалист, а так же был членом комитета. Так что пропускать Шилдта не стоит
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 07:54 #28
Цитата Сообщение от Lavroff Посмотреть сообщение
alexzak, Не читал. Читаю. Однако, про Шилдта слишком резко. Он вполне себе признанный специалист, а так же был членом комитета. Так что пропускать Шилдта не стоит
С твоим знанием С++ тебе будет трудно найти у Шилдта ошибки и просто неверную информацию. Но поверь экспертам, которые не рекомендуют его книги к прочтению. Зайди на этот сайт:
http://accu.org/index.php?module=boo...ws&func=search
и сделай поиск по автору "Schildt". Можешь и обзоры почитать, если английский позволяет.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.08.2010, 09:01 #29
alexzak, Возможно. Но мои знания С++ достаточные для полугода или чуть более изучения. И я привык возвращать 0 явно. На этом можно прекратить дискуссию.
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
18.08.2010, 09:14 #30
Цитата Сообщение от Lavroff Посмотреть сообщение
alexzak, Возможно. Но мои знания С++ достаточные для полугода или чуть более изучения. И я привык возвращать 0 явно. На этом можно прекратить дискуссию.
Понятно. Когда знаний немного, они представляются в форме абсолютных истин. Но с опытом это проходит.
Yandex
Объявления
18.08.2010, 09:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru