试图写入文件,但只打印一次
我正在写一个小物理引擎,我正在学习如何写入一个文件,我想要做的是打印与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