idkwhatimdoing Ответов: 3

Как я могу сделать цикл в C++?


Я работаю над школьным проектом, где мы разрабатываем игру, похожую на орегонскую тропу, к сожалению, учитель дал нам слишком много творческой свободы, поэтому мы были готовы запутаться в этой истории, но проблема не в этом.
Я хочу сделать цикл в зависимости от того, сколько дней вы остаетесь, но цикл бесконечен, и я хотел бы выяснить, как сделать его зависимым от количества дней

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()

{
	
	int day;
	cout << "How many days would you like to stay?" << endl;
	cin >> day;
	for( int zom = 25;  zom > day; zom++) {
		cout << "The zombies have increased by" <<zom<< endl;
	}
	system("pause");
}


Что я уже пробовал:

я посмотрел его, и вот как я получил код цикла, но он бесконечен

3 Ответов

Рейтинг:
2

steveb

for (int zom = 25, days = 0; days < day; zom++, days++) {
		std::cout << "The zombies have increased by" << zom << std::endl;
	}


Dave Kreskowiak

Это классное задание для начинающих. Я бы сказал, что не усложняйте ситуацию, используя несколько переменных в цикле for. Пусть они сначала изучат основы.

Рейтинг:
2

Patrice T

Цитата:
я посмотрел его, и вот как я получил код цикла, но он бесконечен

Используйте отладчик, чтобы наблюдать за выполнением вашего кода, это улучшит вашу кривую обучения.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
1

Rick York

Обычно петли начинаются с нуля или единицы и увеличиваются до предела. Вот вам пример этого:

int main()
{
    int day;
    cout << "How many days would you like to stay?" << endl;
    cin >> day;
    for( int zom = 0; zom < day; zom++)
    {
        cout << "The zombies have increased by" << zom << endl;
    }
    system("pause");
}
Если вы введете 3, то этот цикл будет выполняться со значениями zom 0, 1 и 2, которые будут составлять 3 итерации. Если цикл начинается с нуля и выполняется меньше, чем количество, это приведет к итерациям подсчета.

Вы можете получить аналогичные результаты, начав с 1 и перейдя к значению, равному количеству, но тогда индексы будут начинаться с 1. Вот такая вот петля :
int main()
{
    int day;
    cout << "How many days would you like to stay?" << endl;
    cin >> day;
    for( int zom = 1; zom <= day; zom++)
    {
        cout << "The zombies have increased by" << zom << endl;
    }
    system("pause");
}
В цикле for есть три компонента. Инициализирующий оператор, условный оператор и инкрементирующий оператор. В этих примерах инициализаторами являются объявление zom и установка его в 0 или 1. Условные операторы-это тесты < и <=. Инкремент-это оператор zom++.

Вот небольшой пример, который делает каждое из этих утверждений отдельной функцией.
// for loop example

void Initializer( int &value )
{
   value = 0;
   printf( "Initializer() : value was set to %d\n", value );
}

bool Conditional( int &value, const int limit )
{
   bool result = ( value < limit );
   printf( "Conditional() : value is %d - returning %d\n", value, (int)result );
   return result;
}

void Incrementer( int &value )
{
   ++value;
   printf( "Incrementer() : value is now %d\n", value );
}

void main()
{
   const int limit = 3;
   int value = -1;   // arbitrary initial value
   printf( "beginning for loop : value is %d and limit is %d\n", value, limit );

   for( Initializer( value ); Conditional( value, limit ); Incrementer( value ) )
   {
       printf( "for loop body : value is %d\n", value );
   }

   printf( "exited for loop - value is %d\n", value );
}
Выход из программы:
beginning for loop : value is -1 and limit is 3
Initialize() : value was set to 0
Conditional() : value is 0 - returning true
for loop body : value is 0
Increment() : value is now 1
Conditional() : value is 1 - returning true
for loop body : value is 1
Increment() : value is now 2
Conditional() : value is 2 - returning true
for loop body : value is 2
Increment() : value is now 3
Conditional() : value is 3 - returning false
exited for loop - value is 3
вы можете включить stdio.h, чтобы получить объявление printf. Функции в цикле также могут быть операторами и обычно находятся в большинстве циклов for. Я сделал их функциями, чтобы вы видели, как они работают и используются, и чтобы подчеркнуть, что они являются отдельными операторами в цикле for.