2017-10-26 19 views
-2

ではifstreamを使用して、txtファイルを読み込みます。は、私はC++ BUILDER 6を使用していると私はこのコードを理解しようとしているC++ Builder 6の

私はtxtファイルに4つの変数をログに記録し、成功を得ています:

sprintf(buffer, "%i,%i,%i,%i", x, yMin, yMed, yMax); 
ofstream logData; 
logData.open("logData.txt", ios::app); 
logData << buffer << "\n"; 

マイTXT出力は:

1,1686,1784,1972 
2,1687,1785,1973 
3,1688,1786,1974 
... 

私は戻って、プロットに変数を取得するには、このファイルを読むために必要がありますグラフ。私はこのようにやっている、それが正常に動作しています:

std::ifstream infile(OpenDialog->FileName.c_str()); 
int num, y, yMin, yMax; 
char a,b,c; 
char buffer[100]; 
if(infile.is_open()) 
{ 
    while (infile >> x >> a >> yMin >> b >> yMed >> c >> yMax) 
    { 
     sprintf(buffer, "X: %i | YMIN: %i | YMED: %i | YMAX: %i", x, yMin, yMed, YMax); 
     Memo1->Lines->Add(buffer); 
    } 
} 

マイMEMO1出力:

X:1 | YMIN: 1686 | YMED: 1784 | YMAX: 1972 
X:2 | YMIN: 1687 | YMED: 1785 | YMAX: 1973 
X:3 | YMIN: 1688 | YMED: 1786 | YMAX: 1974 
... 

私の質問は次のとおりです。どのようにC++が変数を区別したのですか?

while (infile >> x >> a >> yMin >> b >> yMed >> c >> yMax) 

コード行をsprinftする入る:

sprintf(buffer, "X: %i | YMIN: %i | YMED: %i | YMAX: %i", x, yMin, yMed, YMax);

それはtxtファイルの行により、whileループの読み取りラインによってその x = 1yMin = 1686 ...を前提としている私が取得できませんでした

変数x、yMin、yMed、YMaxは既にtxtファイルからの値を想定しています。

注:私の理解C++が期待するには、いくつかのINT + CHAR CHARがある+ INT + CHAR ... ''。しかし、「1」もCHARで、ログに記録すると:

1116861178411972 instead 1,1686,1784,1972 

これは正しく動作しません。

は、誰かが私にいくつかのガイドを与えることはできますか?それを理解し始めるのはどこか?

+0

[特定のC関数はどのように機能しますか?](https://stackoverflow.com/questions/8883896/how-does-the-particular-c-function-work) –

+0

先頭へ:http: /en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt2 – user0042

+1

理解できない特定のビットについて説明する必要があります。 'cin'、' printf'など何か? –

答えて

1

infile >> xxintの場合、入力は整数値の一部である可能性がある文字のみを読み取ります。コンマはできませんので、入力操作はそこで停止します。

次に入力は>> aで続き、単一のcharが検索されます。カンマはチャンクなので、aに読み込まれます。

そして、それは別の整数を読み取ろうとし続け、そして幸運にも次の部分は再び桁です。

関連する問題