2013-07-03 102 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 
} 

此外,你缺少你的while循环的结束括号。

+2

开口括号太... –

1

主要有两大问题,你缺少的while循环牙套,应该如下:

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

的第二个问题是,你是按值传递countIncrement,如果你想更新count您可以通过引用传递:

void Increment (int &nextNumber) 
0

你被value.When传递的问题,您通过数量来增加它使一个被称为nextNumber副本,并增加it.This变化不能反映在发出的论点中编辑。因此计数从未增加。

要纠正,您可以从增量或呼叫参考返回一个值。

打电话值

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++; 
} 

您还没有封闭while循环用大括号{ }可以对程序的执行产生不利影响。

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 

您需要括号否则,而将只执行在COUT一遍又一遍,不执行递增功能

+0

这不是唯一的问题。 – Maroun

+1

这是问题的一部分。在Increment中修正Pass-by-Reference问题而不进行此更改不会修复整个程序。 –

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