While循环只在for循环内执行一次
While loop only executing once inside of for loop
大家好,很简单的问题,
我这里有一些代码来计算最佳拟合直线方程。我在for循环中嵌套的while循环遇到了麻烦。我怎样才能让它重复1000次呢?不能使用数组,课堂上还没教过;(.
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
double measureSSE(double m, double b, double Xi, double Yi)
{
return (Yi - ((m * Xi) + b)) * (Yi - ((m * Xi) + b));
}
int main()
{
double Xi = 0, Yi = 0;
double m = 0, b = 0;
double dm = 0, db = 0;
double SSE = 0;
ifstream points("points.txt");
if(points.is_open())
{
for(int counter = 0; counter < 1000; counter++)
{
while(points >> Xi >> Yi)
{
dm += -2 * Xi * (Yi - (m * Xi) - b);
db += -2 * (Yi - (m * Xi) - b);
m -= .01 * dm;
b -= .01 * db;
SSE += measureSSE(m, b, Xi, Yi);
}
cout << "SSE: " << SSE << endl;
}
cout << "Final Model: y = " << m << "x + " << b << endl;
points.close();
}
else cout << "Unable to open file." << endl;
}
假设您希望每次都从头开始重新启动遍历文件,那么您需要在while
循环之前查找读游标,以便它即使在上一次运行达到EOF时也能工作。您还需要首先清除EOF标志(除非您正在编写c++ 11或更高版本,其中为您完成此操作)。
当你重新进入基于从流中提取的while
循环时,语言没有任何特殊的规则来为你做这件事。
for(int counter = 0; counter < 1000; counter++)
{
// Clear EOF flag, and revert to the beginning of the stream
points.clear();
points.seekg(0);
// Extract all "points" from the file
while(points >> Xi >> Yi)
我不太确定SSE
应该在这里做什么,因为你从来没有实际使用它的值,而不是调试输出。如果我知道for
循环的作用,我可能会建议在每次迭代时将其值重置为0
。:)
相关文章:
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 花括号使循环运行一次?
- 从子菜单返回后,正确的输入至少进入验证循环一次
- foor 循环的最后一次迭代中的指针更改
- 有没有办法在循环中的条件至少满足一次时运行语句?
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- For循环在cpp中仅执行一次
- 将一副牌循环100次(一副牌)
- 如何强制循环执行另一次迭代到零并关闭循环
- (C++)for循环中的空初始语句是否保存所有编译器中变量的上一次初始化
- 当使用文件中的getline时,循环仅循环一次
- Arduino循环一次
- 在一个文件中循环一次,将行读取到添加到数组中的对象中
- 程序只循环一次
- 每 10 秒循环一次
- 每 'x' ms 重复循环一次
- 为什么这个单词排序程序只循环一次?
- 如何在c++中循环一次要求输入的switch-case语句?
- 通过只循环一次来组合c++标准算法