对于循环不停止

时间:2011-10-05 15:41:22

标签: c++ for-loop compiler-errors

我在一个不会停止的函数中有一个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&gt; c:\ users \ hastudent \ documents \ visual studio 2008 \ projects \ weapon \ weapon \ weapon.cpp(25):警告C4244:'=':从'float'转换为'int',可能会丢失数据

     

1&gt; c:\ users \ hastudent \ documents \ visual studio 2008 \ projects \ weapon \ weapon \ weapon.cpp(30):警告C4244:'=':从'double'转换为'float',可能会丢失数据

程序达到要求下一个号码的程度。然后你输入数字,它一直在问你这个。

5 个答案:

答案 0 :(得分:8)

for循环应为:

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

您现在拥有的内容(i = x)是xi分配,而您可能打算进行比较 。在这种情况下,使用的正确比较是“小于”(i < x)。

答案 1 :(得分:2)

你的for循环永远运行,因为:

  • i = x是一个赋值,而不是一个相等的测试。
  • 其值是左侧的值
  • 你赋予它非零值
  • 在C ++中为非零值。

如果要进行相等测试,请使用==。但是,在这种情况下,你想要一个&lt; thest。

答案 2 :(得分:1)

您是否尝试在for循环中打印i的值?你从x开始,并继续递增。

应该是:

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

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

主要的问题是,在你做i = x的时候,你想要放置在循环的每次迭代中必须保持的条件(称为loop invariant),即i&lt; x如果你从i = 0开始,或者i == x,正如其他人建议的那样,如果从i = 1开始计数。

答案 3 :(得分:1)

for循环的第二部分是“何时继续”条件,而不是“何时停止”。

由于您从索引1开始(非常规但在C ++中未闻所未闻),您应该迭代到有问题的数字:

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

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

答案 4 :(得分:0)

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