我的data.txt文件目前看起来像这样:
32
99
135
0
-999
所以我想做的是将这样的内容输出到我的result.txt文件中:
Centigrade to Farenheit is [insert value here]
Centigrade to Farenheit is [insert value here]
Centigrade to Farenheit is [insert value here]
Centigrade to Farenheit is [insert value here]
-999
我希望我的程序读取多行以便最终读取-999,这将告诉它停止。至少,这就是我认为的问题所在。
这是我到目前为止所做的:
void main ()
{
ifstream ins; // associates ins as an input stream
ofstream outs // associates outs as an output stream
float centigrade, farenheit;
ins.open(in_file); // associating files with streams
outs.open(out_file);
ins >> centigrade;
// input values for centigrade from file data.txt
cout << centigrade << endl;
// echo print input to screen
// processing data
while (centigrade !=-999)
{ // Calculate farenheit
farenheit=centigrade*9/5+32;
// Output farenheit
cout << "Farenheit of " << setprecision(5)
<< centigrade << " " << "is"
<< " " << setprecision(5) << farenheit << endl;
// output result to file result.txt
outs << "Centigrade to Farenheit is: " << farenheit << endl;
ins.close () ; // closing input file
outs.close (); // closing output file
}
_getch(); // holding the screen
} // end main
答案 0 :(得分:1)
在你的程序中,你只读取输入一次,然后关闭循环中的输入文件。
您需要使用循环来继续读取输入文件,直到您读取的值是指示您已完成的值-999
。离开循环后关闭输入文件。
std::string number;
ins.open(in_file); // associating files with streams
outs.open(out_file);
while ((ins >> number) && (number != "-999")) {
centigrade = std::stof(number);
//...do something with centigrade
}
ins.close();
outs.close();
答案 1 :(得分:0)
由于您没有明确的问题,同时您的程序包含多个问题,我将尝试解决这些问题并更正您的代码。
将浮点数与其他数字(如-999)进行比较时要小心,因为它可能因浮动性质而失败。浮点数学并不精确,它旨在表示各种可能的值,但有一些近似值。 例如,我的机器上的这些检查失败: 断言((long int)16777217.0f == 16777217); 断言(111111.0f + 1000000.0f == 11111111.0f); 如果它现在太难理解,那么现在只需使用整数摄氏度。
你在循环中关闭进出,但你必须在循环后进行。
你只读了一个摄氏度,尽管你应该在循环中阅读它。
void main() { ifstream ins; 流出;
ins.open(in_file);
outs.open(out_file);
do
{
int centigrade = 0;
ins >> centigrade;
if (centigrade == -999)
break;
cout << centigrade << endl;
float farenheit = (centigrade * 9 / 5.0f) + 32.0f;
cout << "Farenheit of " << setprecision(5)
<< centigrade << " " << "is"
<< " " << setprecision(5) << (int)farenheit << endl;
outs << "Centigrade to Farenheit is: " << farenheit << endl;
}
ins.close();
outs.close();
_getch();
}