0

私は C++ の初心者で、初めて getline() 関数を使用しようとしています。このコードを書いたところ、2 つのエラーが表示されました。

このコードは何をすることになっていますか? read.txt から 4 つの数値を読み取り、それを計算して平均を求め、出力を output.txt に書き込むことになっています。

4 つの数字 (read.txt 内) はすべて、次のように別々の行にあります。

6
12
15
19

コードは次のとおりです。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

    int main () 
    {
     ifstream readFile;
        ofstream sendFile;
     readFile.open ("read.txt");
     sendFile.open ("output.txt");;

     float mean;
     int num, num2, num3, num4;
     getline(readFile, num), getline(readFile, num2), getline(readFile, num3), getline(readFile, num4); 

     readFile >> num >> num2 >> num3 >> num4;
     sendFile << "1. The mean of " << num << ", " << num2 << ", " << num3 << ", and " << num4 << "is " << (num + num2 + num3 + num4) / 4;

     readFile.close();
     sendFile.close();

      system ("PAUSE") ;
      return 0;
    }

エラーは次のとおりです: IntelliSense: オーバーロードされた関数「getline」のインスタンスが引数リストと一致しません 20 IntelliSense: 関数呼び出しの引数が少なすぎます 20

4

3 に答える 3

1

std::getline()は 2 つの引数を取ります: ストリームと、std::string次の行を読み込むオブジェクト (およびオプションの 3 番目の引数である区切り文字)。intの代わりにを渡していstd::stringます。

おそらく、通常のフォーマットされた抽出を使用する必要があります。

if (readFile >> num >> num2 >> num3 >> num4) {
    // extraction succeeded!
}
else {
    // extraction failed; handle the error here
}
于 2010-10-14T15:51:46.263 に答える
0

std::getline は、1 行のテキストを読み取るか、特定の文字までのテキストを読み取り、それを std::string に書き込んでさらに読み取ることができる便利なツールです。デフォルトでは区切り文字として改行、つまり '\n' を使用しますが、これは変更できます。

ストリームを使用して多数の整数を読み取り、それらの平均を出力することに関して、ファイルの最後まで読み取らないのはなぜですか。

int count = 0, total = 0, num;
while( instr >> num )
{
  ++count;
  total += num;
}

float mean = (count > 0 ) ? total / num : std::numeric_limits<float>::quiet_NaN();
outstr << mean;

istream & instr と ostream & outstr を取って、それを関数にすることができます

ここで、それぞれがスペースまたはタブで区切られた複数の行を読み取るように変更したいとします。出力では、すべての手段をそれぞれの行に書き込みます。

次のようにします。

std::string line;
while( std::getline( bigInStr, line ) )
{
   std::istringstream iss(line);
   outputMean( iss, outstr );
   outstr << '\n';
}

ただし、実際には NaN を出力せずに、出力でその行を空白のままにしておくこともできます。平均を計算する関数は、float を返さなければならない場合、戻り値として NaN を使用したいと思うでしょう。繰り返しながら必要に応じて、分散、歪度、尖度を同時に計算できます。

次に、これらを行に複数の値として出力し、独自の区切り文字を選択する必要があります。私自身の好みは、この状況でタブ ('\t') を使用することです。

_

于 2010-10-14T16:01:14.467 に答える
0

getlinestd::string に読み込みますが、s に読み込むことはできませんint。そのまま使用readFile >> num >> num2 >> num3 >> num4;し、s で行を削除しgetlineます。

別の注意として、ファイル ストリーム オブジェクトのデストラクタがそれを処理するため、ここで明示的にファイルを閉じる必要はありません。

于 2010-10-14T15:51:54.220 に答える