#c
#c
Вопрос:
Вывод этого кода 4
, и я не понимаю почему. Кто-нибудь, пожалуйста, может объяснить, почему?
#include <iostream>
using namespace std;
int main(){
int val = 1;
do{
val ;
val;
}while (val > 25);
cout << val << endl;
return 0;
}
Комментарии:
1. Ну, потому что 4 < 25 и вы увеличиваете
val
в 3 раза.2. @Bob__ потому что 4 <= 25, если вы хотите получить полную информацию об этом.
3. Быстрый прогон с вашим отладчиком был бы очень полезен.
4. Как вы думаете, результат должен быть чем-то другим? Если да, объясните, почему вы так думаете.
5. Голосование против, потому что вы думаете, что человек должен что-то знать, не является веской причиной для голосования против. Этот парень собрал пример и задал серьезный вопрос. Он просто не понимает имеющийся у него код, с которого мы все начинали (если мы только можем вспомнить, что было так давно) 🙂
Ответ №1:
int val = 1; // val is 1
do{
val ; // val is 2 after statement
val; // val is 3 after statement
}while (val > 25); // val is 3 within expression
// 3 > 25 is false so while loop exits.
// --
// After the expression
// val incremented with postfix to 4.
cout << val << endl; // print val (which is 4)
Комментарии:
1.
value is 4
Почему именно так? Объясните, пожалуйста.2. Придирка: условие будет использовать
val
значение 3, потому что оно постфиксное.
Ответ №2:
С помощью цикла do while вы выполните тело цикла один раз, а затем оцените условие while, чтобы увидеть, следует ли это делать снова. Это означает, что вы делаете
val ;
val;
создаем val
3
, а затем выполняем val
в операторе condition. это делает val
4
, но оно возвращает 3
, поскольку это выражение после увеличения и поскольку 3
оно не больше 25
, вы выходите из цикла. Вот почему val
имеет значение 4
.
Ответ №3:
Значение Val увеличится на 2 в пределах do в самый первый раз, и при проверке условия в блоке while для do while его значение увеличивается на 1. т.е. while (4> 25). Следовательно, значение Val будет равно 4.
Комментарии:
1. Первый параметр var инициализируется с 1, после этого post increment и pre increment. Здесь его значение равно 3. Теперь в while here оно также имеет приращение post. Итак, в конечном итоге его значение будет равно 4.
Ответ №4:
В строке int val = 1;
val
будет установлено значение 1. в строке val ;
и в строке val;
, val
будет увеличиваться, поэтому после обоих, val
будет установлено значение 3.
Теперь, вероятно, вы имели в виду while (val < 25)
, но вы написали while (val > 25)
. Таким образом, val
будет увеличен до 4, но даст 3 из-за того, что выполняется после ввода, и сравнение 3 > 25
даст false
результат, то есть цикл не будет зацикливаться.
После этого вы печатаете значение, равное 4.
Предполагая, что вы новичок в C , я также хочу намекнуть вам на ТО, чтобы НЕ использовать using namespace std;
, а вместо этого писать std::
перед cout . Пространства имен были введены для предотвращения конфликтующих имен символов в библиотеках и т.д. И переноса всех символов в глобальное пространство имен с using namespace std;
фактически полностью обходит цель, стоящую за пространствами имен.
Комментарии:
1. в случае «while (val < 25)» результат равен 28
2. Вы ожидали чего-то другого? К какой цели вы стремитесь?
Ответ №5:
Вы увеличиваете значение val в теле дважды, затем оно снова увеличивается там, где вы указали while .
int main(){
int val = 1;
do{
val ; // val = 2
val; // val = 3
}while (val // val = 4 > 25); // then breaks the loop because 4 < 25.
cout << val << endl;
return 0;
}