我在一个不会停止的函数中有一个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',可能会丢失数据
程序达到要求下一个号码的程度。然后你输入数字,它一直在问你这个。
答案 0 :(得分:8)
for
循环应为:
for (int i = 1; i < x; i++)
您现在拥有的内容(i = x
)是x
到i
的分配,而您可能打算进行比较 。在这种情况下,使用的正确比较是“小于”(i < x
)。
答案 1 :(得分:2)
你的for循环永远运行,因为:
如果要进行相等测试,请使用==。但是,在这种情况下,你想要一个&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循环中使用!=(比较运算符)而不是=(赋值运算符)。