Итак, я изучаю 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
Готово!
Проблема с вашим кодом заключается в том, что вы потеряли части 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;
}
Как подсказывает @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
также.
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--)
и перестаньте баловаться с хитрым кодом 🙂
Я думаю, что вы не соответствовали среднему сроку. Цикл 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)