gpt4 book ai didi

c++ - while循环只在for循环内部执行一次

转载 作者:行者123 更新时间:2023-11-28 02:04:19 24 4
gpt4 key购买 nike

大家好,这里是简单的问题,

我这里有一些代码可以计算最佳拟合线方程。我在使用嵌套在 for 循环中的 while 循环时遇到问题。目前,“while(points >> Xi >> Yi)”只运行一次,然后(我猜)当它到达文档末尾时,它不会重复自己。我怎样才能让它重复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;
}

最佳答案

假设你想每次都从头开始迭代文件,你需要seek the read cursor在你的 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。 :)

关于c++ - while循环只在for循环内部执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com