2011-10-05 213 views
2

我有一个不会停止的函数for循环。 这里是一个用于查找一个人的成绩全功能,将它们添加在一起,则显示的平均屏幕上:For循环不停止

float Student::average() { 
    cout << "How many grades would you like to enter? (Up to ten)\n"; 
    float x; 
    cin >> x; 

    cout << "What is your first grade?"; 
    cin >> grade[0]; 
    int i = 1; 
    for (i; i = x; i++) { 
     cout << "What is the next number?\n"; 
     cin >> grade[i]; 
    } 
    averageGrade = std::accumulate(grade, grade+10, 0.0); 
    averageGrade = averageGrade/10; 

    return averageGrade; 
} 

,这里是for循环自身:

for (i; i = x; i++) { 
    cout << "What is the next number?\n"; 
    cin >> grade[i]; 
} 

的错误也输出(但仍然允许程序运行)说:

1> c:\ users \ hastudent \ documents \ visual studio 2008 \ projects \ weapons \ weapon \ weapon.cpp(25):warning C4244 :'=':收敛sion从'float'到'int',可能丢失数据

1> c:\ users \ hastudent \ documents \ visual studio 2008 \ projects \ weapons \ weapon \ weapon.cpp(30):warning C4244:' =”:转换从‘双’到‘浮动’,数据

该程序起到其要求的下一个号码的点的可能的损失。然后你输入号码,它一直问你。

+0

这些是_warnings_,而不是_errors_。 –

+0

你应该为'x'使用'int';我认为不可能输入一半的成绩。另外,您应该认真考虑为变量使用更多描述性名称。使用'i'作为计数器是好的,但用'numGrades'代替'x'将使代码更容易阅读。 –

+0

实际上我有numGrades之前,但我改变它为我的易用性。此外,for循环现在可以工作,但现在无论何时显示averageGrade,控制台都只显示其内存地址。 – ChrisMP

回答

8

for循环应为:

for (int i = 1; i < x; i++) 

你现在有什么(i = x)是xi分配,而你可能是打算一个比较。在这种情况下,使用的正确比较是“小于”(i < x)。

+0

+1:中间条款是“只要情况如此”,而不是“直到这种情况”......即使是这样,OP的意思是“==”而不是“=”。 –

+0

我的指数确实从零开始。查看for循环开始之前的代码。 – ChrisMP

+0

@ user980583:我的不好,答案已纠正。 – NPE

1

你有没有尝试在for循环中打印我的值?你从x开始,并继续增加。

这也许应该是:

for(int i=0; i<x; i++) { /* do something */ } 

通常你从0开始计数,而不是1

的主要问题是,你做我= X你想放而不是条件是必须如果从i = 0开始,或者像其他人所建议的那样i == x,如果从i = 1开始计数,则保持在循环的每次迭代(即所谓的loop invariant),即i < x。

2

您的循环永远跑,因为:

  • 我= x是分配的,而不是一个平等的测试。
  • 它的值是左手侧
  • 的价值,你给它的非零值
  • 和非零值是true在C++中。

如果你想要一个平等的测试,使用==。但是,在这种情况下,你想要一个<最好的。

1

for回路的第二部分是“当继续”状态,而不是“何时停止”。

因为你开始与指数1(非常规但在C并非闻所未闻++),你应该循环到数问题:

for(i = 1; i <= x; ++i)

注意,即使条件是“何时退出” =是在C++中的赋值,而==是等同比较。

0

在FOR循环中使用!=(比较运算符)而不是=(赋值运算符)。