KiberCuber
@KiberCuber
да-да

В какой момент происходит переполнение переменной и как его пресечь?

https://pastebin.com/KWYwdTFh
Недавно начал изучать плюсы, и на курсах было задание: написать программу с игрой в 21. Мой "код" по ссылке выше.
Проблема в том, что при прибавлении в переменную my_hand значения из вектора values по индексу x я получаю (на момент написания вопроса уже при кажлом запуске) значение 32000+. Предположительно, из-за числа, которое получается при генерации в rand(), хоть я и не уверен. В строке 55 я попытался подгадать момент, когда my_hand становится слишком большой, но это ни к чему не приводит, и я просто получаю еще большее значение. Также я думал, что проблема может быть в том, какое значение я использую в качестве аргумента в srand(), но при его изменении так же чуда не случилось. Заранее прошу прощения, если ошибка какая-то глупая.

P.S. если это не переполнение, то тоже простите.
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
Отвечая на вопрос заголовка: В библиотеках C++ есть заголовочный файл limits.h, где определены макросы с максимальными возможными значениями стандартных типов. Например, максимальное значение int хранится в макросе INT_MAX.
Аналогично, существуют макросы и для других типов: UINT_MAX, SHRT_MAX, LONG_MAX и т.д.

P.S.
Кажется, я нашел причину переполнения.
Строка 47, вы создали, но не инициализировали переменную my_hand, а в 54, 55 и 56 вовсю используете.
Алгоритм стоит исправить с:
int my_hand, en_hand = 0;
На:
int my_hand = 0, en_hand = 0;

P.S 2
Вместо while(1==1) рекомендую использовать while(true). Материал на эту тему (Статья на docs.microsoft)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы