cin >> num1
пытается прочитать число из стандартного ввода в переменную num1
. Если это удастся, тело if
будет выполнено. В противном случае (например, если пользователь ввел что-то отличное от числа или сразу нажал Ctrl-d / Ctrl-z), мы сразу переходим к коду после if
. Это происходит ровно один раз.
cin >> num2
делает то же самое с переменной num2
, за исключением того, что на этот раз она находится внутри while
вместо if
. Таким образом, если операции ввода завершаются успешно, выполняется тело цикла while, и затем cin >> num2
выполняется снова, пока в конечном итоге не завершится неудачей.
Я не понимаю, почему существует num1=num2
.
Как я уже сказал, cin >> num1
выполняется только один раз (это не внутри цикла). Поэтому, если вы никогда не назначите num1
заново, оно всегда будет сохранять первое введенное значение. Но вы не хотите этого, вы хотите, чтобы оно содержало значение, которое вы в данный момент считаете. Вот почему это назначение есть.
При num1 = num2 он меняет num1 в if (cin >> num1), и все начинается снова. Я прав?
Нет, cin >> num1
никогда не выполняется снова. Это не внутри петли. Только cin >> num2
выполняется несколько раз, потому что эта часть цикла while
.
Что также странно, что самый последний кут может быть уверен внутри первого, если тело, а может и нет, оно все равно работает ...
Если первая операция ввода не удалась, она сразу же переместится наружу. Если есть оператор cout
, это будет означать, что он будет выполнен, даже если первый ввод не удался. В этом случае num1
будет неинициализирован, поэтому его использование вызовет неопределенное поведение. Поэтому это утверждение не должно быть за пределами if
.