1

次の種類の入力テキストファイルがあります

28306.5934893134
Const for C
0.086628745225
Const for D
1226.12828874073
Const for F
6.60731462829
Const for G
-14694.9395750279
Const for J
273245702.243239
Const for K
5563100.12791444

一行ずつ読みたい。私は現在、次のようなifstreamとgetlineを使用しています。

correl>>const_h;
cout<<const_h;


std::getline(correl,line_avoid);
correl>>C1;
cout<<C1<<endl;


std::getline(correl,line_avoid);
correl>>C2;
cout<<C2<<endl;

std::getline(correl,line_avoid);
correl>>C3;
cout<<C3<<endl;

std::getline(correl,line_avoid);
correl>>C4;
cout<<C4<<endl;

std::getline(correl,line_avoid);
correl>>C5;
cout<<C5<<endl;

std::getline(correl,line_avoid);
correl>>C6;
cout<<C6<<endl;

最初の値は読み取られますが、他の値は読み取られません。値のみを読み取り、入力ファイルのコメントをスキップするにはどうすればよいですか?

4

2 に答える 2

1

たとえばcorrel>>C1;、改行がストリームに残っている場合、次getlineはその改行を取得し、次はcorrel>>C2;無視したい行からフェッチしようとします。

これを解決するにはいくつかの方法があります。1 つ目はgetline、両方の行に使用し、無視したい行を無視istringstreamし、もう一方の行に使用して値を抽出することです。

std::istringstream is;

std::getline(correl, line_avoid);
std::getline(correl, line_keep);
is.str(line_keep);
is >> C1;
cout << C1 << endl;

もう 1 つの方法は、値を読み取った後、改行までスキップすることです。

std::getline(correl, line_avoid);
correl >> C1;
correl.ignore(numeric_limits<streamsize>::max(), '\n');
cout << C1 << endl;
于 2012-10-19T05:44:16.747 に答える
1

次のより単純なコードでうまくいくはずです。

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

std::ifstream infile("data.txt");

for (std::string l1, l2; std::getline(infile, l1) && std::getline(infile, l2); )
{
    std::cout << "Data: " << l1 << std::endl;
}

(行を数値として解析する場合はdouble d = std::stod(l1);、C++11 で使用するか、他の変換方法を使用できます。)

于 2012-10-19T02:28:05.093 に答える