我是C ++的新手,我不知道如何从.txt文件中输入多行数字

时间:2014-09-18 05:04:10

标签: c++

我的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

2 个答案:

答案 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)

由于您没有明确的问题,同时您的程序包含多个问题,我将尝试解决这些问题并更正您的代码。

  1. 将浮点数与其他数字(如-999)进行比较时要小心,因为它可能因浮动性质而失败。浮点数学并不精确,它旨在表示各种可能的值,但有一些近似值。 例如,我的机器上的这些检查失败: 断言((long int)16777217.0f == 16777217); 断言(111111.0f + 1000000.0f == 11111111.0f); 如果它现在太难理解,那么现在只需使用整数摄氏度。

  2. 你在循环中关闭进出,但你必须在循环后进行。

  3. 你只读了一个摄氏度,尽管你应该在循环中阅读它。

    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();
    

    }