试图写入文件,但只打印一次

我正在写一个小物理引擎,我正在学习如何写入一个文件,我想要做的是打印与angle.txt文件的角度相同的方式输出。这是我的程序:试图写入文件,但只打印一次

int main() { 

ofstream myFile;

myFile.open("angle.txt");

cout << "Insert a lanuch Angle (theta): ";

cin >> thetaDegrees;

cout << "Insert a launch height: ";

cin >> yOld;

cout << "Insert an initial velocity: ";

cin >> initialVelocity;

cout << "Time (DeltaT) in seconds: ";

cin >> totalT;

for (double deltaTime = 0.0; deltaTime < totalT; deltaTime += 0.1) {

const double squared = deltaTime * deltaTime; // squared constant for deltaTime squared

theta = thetaDegrees * PI/180; // converts theta to a degrees value

// apply initialV to velocity

velocity = initialVelocity + 9.8 * time;

yNew = yOld + velocityY * deltaTime - gravitiyHalf * (squared); // calculates Y

velocityY = velocity - 9.8 * deltaTime; // includes gravity to Y

angle = atan2(yNew, xNew) * 180/PI; // convert angle to degrees

this_thread::sleep_for(chrono::seconds(1)); // sleeps for 1 second each loop

cout << "\nHeight: " << yNew << endl;

cout << "Angle: " << angle << endl;

myFile << angle; // it displays the first value but nothing else!

myFile.close();

yOld = yNew;

}

}

当我运行这个程序时,文件只显示角度的第一个值,然后它忽略了其余部分。我该如何解决这个问题,以便angle.txt文件显示角度的每个值?

编辑:我也试过在for循环之外使用myFile.close();,但这是行不通的。

回答:

流通常会被缓冲。这样做的一个结果是写入流中的字符不会出现在目标中,直到缓冲区被清空刷新为

如果你没有做任何事情来刷新缓冲区,那么写入的字符将不会出现,直到缓冲区被填满为止,考虑到写入文件的速率,这将花费相当长的时间。

你需要做以下之一:

// Option 1 

myFile << angle << flush;

// Option 2

myFile << angle;

myFile.flush();

如果你实际上意味着每个输出是一个单独的行,你只是忘记写出来的换行符,然后有另一种选择,因为这正是endl的用途:

// Option 1 

myFile << angle << endl;

// Option 2

myFile << angle << '\n' << flush;

// Option 3

myFile << angle << '\n';

myFile.flush();

回答:

总是尝试开发新功能隔离。试试这个:

int main() { 

ofstream myFile;

myFile.open("angle.txt");

for (double deltaTime = 0.0; deltaTime < 2.0; deltaTime += 0.1) {

cout << "time: " << deltaTime << endl;

myFile << deltaTime << endl;

}

myFile.close();

}

如果失败了,我们可以尝试解决这个更简单的问题。如果成功,您可以将一些复杂性放回...

以上是 试图写入文件,但只打印一次 的全部内容, 来源链接: utcz.com/qa/262378.html

回到顶部