2013-07-03 4 views
0

Я продолжаю получать бесконечные ошибки цикла при попытке запустить эту программу. Может ли кто-нибудь помочь мне и объяснить, почему? Любая помощь была бы наиболее оценена. Благодаря!Бесконечные петли в C++

void Increment(int); 
    int main() 
    { 
     int count = 1; 
     while(count < 10) 
     cout << "the number after " << count; //Increment function 
     Increment(count); //count+1 
     cout << " is " << count << endl; 
     return 0; 
    } 
    void Increment (int nextNumber) 
    { 
     nextNumber++; //parameter +1 
    } 
+3

Вы изменить его локально - Передавать по ссылке! – Maroun

+0

Почему вы не сделали nextNumber ++ напрямую, а не сделали его функцией? – Borgleader

+0

Это тоже его заявление. У него нет скобок вокруг него. –

ответ

4

требуются фигурные скобки, если ваш while цикл использует более одна линия. На самом деле, вы всегда должны использовать брекеты, чтобы избежать путаницы. Кроме того, ваша Increment функция должна принимать его параметр по ссылке, поэтому он не будет работать на копии (другая причина для бесконечного цикла):

void Increment(int&); 

int main() 
{ 
    int count = 1; 

    while (count < 10) 
    { 
     std::cout << "the number after " << count; 
     Increment(count); 
     std::cout << " is " << count << std::endl; 
    } 
} 

void Increment(int& nextNumber) 
{ 
    nextNumber++; 
} 
+0

b-but..the указатели ... они ... –

+0

@ViniyoShouta приходят снова? – 0x499602D2

+0

Как насчет указателей? – The10thDoctor

8

можно передать по значению, а не по ссылке:

ли это вместо:

void Increment (int& nextNumber) 
{ 
    nextNumber++; //parameter +1 
} 

Кроме того, отсутствуют скобки закрытия для вашего цикла.

+2

открытие брекетов тоже ... –

1

Есть два основных вопроса, вам не хватает скобки для цикла while, должно быть следующим:

while(count < 10) 
{ 
    cout << "the number after " << count; //Increment function 
    Increment(count); //count+1 
    cout << " is " << count << endl; 
} 

Второй вопрос заключается в том, что вы передаете count к Increment по значению, если вы хотите обновление count вы можете пройти по ссылке:

void Increment (int &nextNumber) 
0

проблемы вы проходя мимо value.When вы передаете номер в увеличивает это делает копию с именем nextNumber и увеличивает .Так изменение не отражает ed в отправленном аргументе. Таким образом, счет никогда не увеличивался.

Чтобы исправить, вы можете либо вернуть значение из приращения, либо вызвать ссылку.

Вызов по значению

int Increment (int nextNumber) 
{ 
    return nextNumber+1; //parameter +1 
} 

Оператор вызова здесь:

count=Increment(count); 

Вызов по ссылке:

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

void Increment (int& nextNumber) 
{ 
    nextNumber++; //parameter +1 
} 

Оператор вызова здесь:

Increment(count); 

Пожалуйста, спросите, если у вас есть вопросы.

1

Вы передаете count по значению, из-за которого он не увеличивается. Передача по значению означает, что в функции используется локальная копия переменной, и она не влияет на исходную переменную. Вам необходимо передать адрес, используя & operator. Вы можете использовать это: -

void Increment (int& nextNumber) 
{ 
    nextNumber++; 
} 

Вы также не прикладывается в то время как петли с фигурными скобками { }, который может иметь нежелательный эффект на выполнение программы.

1

Функция Increment ничего не делает, поскольку она принимает параметр nextNumberпо значению. Это означает, что он работает с копией переменной, переданной в нее, поэтому ее изменения теряются при выходе из функции.Вместо этого, сделать его принять переменную по ссылке:

void Increment (int &nextNumber) 
    { 
     nextNumber++; //parameter +1 
    } 

Вы также должны окружать код внутри цикла while с {}:

while(count < 10) 
    { 
    cout << "the number after " << count; //Increment function 
    Increment(count); //count+1 
    cout << " is " << count << endl; 
    } 
1
while(count < 10) 
    cout << "the number after " << count; //Increment function 

Вам необходимо скобки иначе, пока будет выполнять только соиЬ снова и снова, без выполнения функции приращения

+0

Это не единственная проблема. – Maroun

+1

Это часть проблемы. Фиксирование проблемы сквозной ссылки в Приращении без внесения этого изменения не будет исправлять общую программу. –

4
while(count < 10) 
    cout << "the number after " << count; //Increment function 

Это бесконечный цикл, так как счетчик всегда то же самое значение, и не изменяется при этом цикле.

Вот почему вы должны иметь кронштейны ({}) вокруг петель, иначе вы совершаете ошибки следующим образом.

Чтобы повторно написать свой код и иллюстрировать то, что происходит:

void Increment(int); 
int main() 
{ 
    int count = 1; 
    while(count < 10) 
    { 
     cout << "the number after " << count; //Increment function 
    } 
    Increment(count); //count+1 
    cout << " is " << count << endl; 
    return 0; 
} 


void Increment (int nextNumber) 
{ 
    nextNumber++; //parameter +1 
} 
+0

Кроме того, параметр должен передаваться по ссылке. – Maroun

+0

Да, без фиксации функции, обертывание его кода в '{}' ничего не поможет. – crush

+2

И фиксация функции ничего не исправит, если у него нет брекетов. Проблема с курицей и яйцом. – abelenky