Skip to content

Виленский Тимофей Иванович#1

Open
dash1ney wants to merge 2 commits intocppdevcourse:masterfrom
dash1ney:master
Open

Виленский Тимофей Иванович#1
dash1ney wants to merge 2 commits intocppdevcourse:masterfrom
dash1ney:master

Conversation

@dash1ney
Copy link
Copy Markdown

@dash1ney dash1ney commented Oct 2, 2025

No description provided.

Comment thread main.cpp Outdated
int random = rand() % 10;
int number;

while (number != random)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В программе содержится неопределенное поведение — чтение неинициализированной переменной number. Возможно (но, естественно, маловероятно), значение в этой переменной совпадет с random. Тогда программа завершится сразу после начала работы.

P.S. Кстати, хороший пример того, чем может быть опасно неопределенное поведение. Попробуем скомпилировать вашу программу с максимальным уровнем оптимизаций (флаг -O3).

Компилятор GCC хорошо справляется с вашей программой, она работает как и должна:

$ g++ -O3 main.cpp -o main
$ ./main
Guess a number from 0 to 9:

А вот другой компилятор, Clang, компилирует неработающую версию:

$ clang++ -O3 main.cpp -o main
$ ./main
Segmentation fault (core dumped)

При этом поведение Clang-а абсолютно нормально.

Вот ссылка, где можно посмотреть дизассемблированный код, собранный Clang-ом: https://godbolt.org/z/x4h7rrzxf. Предлагаю вам посмотреть на ассемблер (если умеете чего читать) и попытаться понять, какие решения принял компилятор и чем это закончилось для вашей программы.

Comment thread main.cpp Outdated
int main()
{
srand(time(0));
int random = rand() % 10;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Эту переменную лучше сделать константной.

Comment thread main.cpp Outdated
{
srand(time(0));
int random = rand() % 10;
int number;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для random и number я бы выбрал беззнаковый тип. В условии задачи сказано, что валидацию ввода делать не надо, поэтому мы можем сразу рассчитывать, что пользователь введет число от 0 до 9

Comment thread main.cpp Outdated
std::cout << "Guess a number from 0 to 9: ";
std::cin >> number;

number == random
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сравнение дублируется. Можно организовать цикл более элегантно, без повторения условий.

@czertyaka
Copy link
Copy Markdown
Collaborator

Задание принято. PR вливать не нужно.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants