2

だから簡単な問題です。特定のファイルから入力を読み取るだけです。入力を摂氏温度として使用し、この温度を華氏に変換してから、結果をユーザーに出力します。

ファイルからの入力を保存しようとすると、問題が発生するようです。while ブロックにあります。getline で int 値を使用しようとすると、エラーが発生する可能性があります。私はC ++にかなり慣れていないため、これを行う方法がわかりません。私は無数の方法を試しましたが、どれもうまくいかないようです。どんな助けでも大歓迎です!

やった#include <fstream>

ファイルには、これら 3 つの値「0 50 100」が含まれています。

これは、私が取り組んできたコードのセクションです。

//values for the files three input values
int i = 0, inVal1 = 0 , inVal2 = 0, inVal3 = 0,
    farenheit1 = 0, farenheit2 =0,farenheit3 = 0; 

ifstream inFile; //Input file variable


inFile.open("celsius_input.dat"); //open the file

if(!inFile){
    cout << "Unable to open file";
    exit(1); //terminate with error
}//end if
while (inFile)
{
    cin.ignore();
    getline(inFile, inVal1);
    getline(inFile, inVal2);
    getline(inFile, inVal3); // read the files values

    inFile.close();//Close file


} //end while       



farenheit1 = (9.0/5.0) * inVal1 + 32.0; //formula 
farenheit2 = (9.0/5.0) * inVal2 + 32.0; //formula
farenheit3 = (9.0/5.0) * inVal3 + 32.0; //formula


cout << "The first Inputed Value, " << inVal1
    << " degrees, Converted Into Farenheit Is "
    << farenheit1 << " Degrees!" << endl; //output of results
cout << "     " << endl;

cout << "The Second Inputed Value, " << inVal2
    << " degrees, Converted Into Farenheit Is "
    << farenheit2 << " Degrees!" << endl; //output of results
cout << "     " << endl;

cout << "Teh Third Inputed Value, " << inVal3
    << " degrees, Converted Into Farenheit  Is "
    << farenheit3 << " Degrees!" << endl; //output of results
cout << "     " << endl;
4

2 に答える 2

1

最も簡単に機能するのは次のとおりです。

#include <fstream>
#include <iostream>

int main()
{
    std::ifstream inFile("celsius_input.dat"); //open the file

    double celsius;
    while (inFile >> celsius)
    {
        double fahrenheit = (9.0/5.0) * celsius + 32.0;
        std::cout << "The input value " << celsius << " degrees, converted into fahrenheit is " << fahrenheit << " degrees" << std::endl;
    }
}

本当に最初に行を読む必要がある場合は、次のようにします。

#include <fstream>
#include <iostream>
#include <string>

int main()
{
    std::ifstream inFile("celsius_input.dat"); //open the file

    std::string input;
    while (std::getline(inFile, input))
    {
        double celsius = std::strtod(input.c_str(), nullptr);
        double fahrenheit = (9.0/5.0) * celsius + 32.0;
        std::cout << "The input value " << celsius << " degrees, converted into fahrenheit is " << fahrenheit << " degrees" << std::endl;
    }
}
于 2013-06-02T20:46:43.377 に答える
0

使用している std::getline 関数は、入力を文字列に保存します ( http://www.cplusplus.com/reference/string/string/getline/を参照)。関数に渡す引数が文字列の場合、ファイルから行全体 (「0 50 100」) が取得され、文字列に入れられます。

それを文字列に保存してから、それを 3 つの部分に分割し、C++11 で atoi または std::stoi を使用して int に変換することができます ( Convert string to int C++ をチェックしてください)。エラー。

しかし、もっと簡単な方法があります。数値がスペースで区切られていて、ほとんどすべてが正しいと仮定すると、">>" 演算子はスペースで区切ります。試す:

inFile >> inVal1;
inFile >> inVal2;
inFile >> inVal3;

また、inFile バッファを使用する場合、cin.ignore() を使用する必要はありません。すべてのストリームには、それに関連付けられた異なるバッファー (および cin != inFile) があるため、ファイルから読み取るために cin バッファーをクリアする必要はありません。

于 2013-06-02T20:57:14.993 に答える