Почему этот цикл C ++ не считается от 10 до -5?

Итак, я изучаю C ++, и одной из задач было создать программу, которая будет считать от 10 до -5 … она всегда идет от 9 до 1, и на ней написано Готово!

Пожалуйста, помогите мне, чем вы можете, и вот код:

/*
*
*   Negative Example
*
*/
#include <iostream>
#include <string>
int main()
{
signed int i = 10;
for(i <= 10 && i != (0 - 5); --i;) {
using std::cout;
cout << i << std::endl;
}
std::cout << "Done!" << std::endl;
}

Выход:
9
8
7
6
5
4
3
2
1
Готово!

1

Решение

Проблема с вашим кодом заключается в том, что вы потеряли части for петля.
Как таковой, цикл начинается с оценки условия, а затем переходит к уменьшению i каждый раз, и убедитесь, что это i не равно нулю. Тот факт, что ваш код завершен, является следствием того факта, что --i будет оценивать 0 (неверно) если i == 1,

Ваш код должен выглядеть так:

#include <iostream>
#include <string>
int main()
{
// Move the variable initialization to the first part of the loop
signed int i;

// Note the difference in where the expressions are placed
// relative to the semicolons.
for(i = 10; i <= 10 && i != (0 - 5); --i) {
using std::cout;
cout << i << std::endl;
}
std::cout << "Done!" << std::endl;
}
1

Другие решения

Как подсказывает @jogojapan, вы хотите переписать

 for(i <= 10 && i != (0 - 5); --i;) {

как

for(i = 10 ; i != (0 - 5); --i) {

желательно как (хотя функционально разницы нет)

for(i = 10 ; i > - 5; --i) {

Вы также можете определить i в самом теле цикла, если оно не нужно до или после него, например

for(int i = 10 ; i > - 5; --i) {

Изменить: Изменить i>-5 в i>=-5 если вы хотите, чтобы цикл работал с i=-5 также.

2

for(i <= 10 && i != (0 - 5); --i;) {

У вас есть эти утверждения не в том месте, это должно быть:

for(;i <= 10 && i != (0 - 5); --i) { // or (0 - 5 - 1) if you want -5 as well

Причина, по которой он начинается в 9 и заканчивается в 0, заключается в том, что вы используете --i как продолжение состояния.

Это условие имеет побочный эффект, который он уменьшает i до тело цикла запускается (т. е. начинается с 9) и будет ложным, как только оно достигнет 0.

Для лучшего понимания рассмотрим for (x;y;z):

  • x выполняется один раз до первой итерации.
  • y оценивается раньше каждый итерация цикла и, если true, цикл продолжается (false означает, что цикл завершается).
  • z выполняется после каждой итерации цикла.

Конечно, если вы хотите цикл, который насчитывает от 10 до -5 (включительно), просто используйте:

for (int i = 10; i >= -5; i--)

и перестаньте баловаться с хитрым кодом 🙂

1

Я думаю, что вы не соответствовали среднему сроку. Цикл foreach как 3 члена в скобках, и даже если вы их не используете, вам все равно нужно 2 точки с запятой. Ваш средний член в настоящее время —i, который вернет false только тогда, когда я равен 0.

Кроме того, цикл for в C ++, в отличие от C, имеет часть инициализации, отличную от цикла for, тогда как в C вы объявляете это следующим образом. , ,

int i;
for (i=0; i < 10; ++i)

В C ++ вы можете объявить переменную внутри цикла как таковую. , ,

for (int i=0; i < 10; ++i)
0
По вопросам рекламы [email protected]