0

次のような形式のファイルを読み込んでいます。

TIME, x, y, z
00:00:00.000 , 1, 2 , 3
00:00:00.001 , 2 , 3 , 4

など、および次のようなコード:

std::ifstream& istream;
char buffer[15];
double seconds, hours, mins; // initialised properly in real code

// to read in first column
istream.get(buffer, 14, ',');

int scanned = std::sscanf(buffer, "%d:%d:%lf", &hours, &mins, &seconds);

ほとんどの場合、最初の列を正常に読み取ります。ただし、sscanfが失敗することがあり、Codegearデバッガーを使用してバッファーに何があるかを確認すると、たとえば、sscanfが読み込まれていることがわかります\000:00:023。何らかの理由\0で、先頭にヌル文字、、を収集しています。テキストファイルを見ると、正しく読み込まれた他のすべての時間値と同じ形式であるように見えます。ヌル文字をときどき追加するのはなぜですか?そして、回避策はありますか?

4

3 に答える 3

2

空白行を読んだか、ファイルの終わりを超えて読み込もうとしています。

最初の文字は\0、文字列の終わりを意味する。

それ以降の文字はすべて手つかずのメモリです。

于 2009-12-22T00:31:49.993 に答える
2

これを試してみてください。

ifstream inpfile("sample.txt");
char buffer[15];
inpfile.ignore(80, '\n');
while (!inpfile.eof())
{

    inpfile.get(buffer, 14, ',');
    int hrs, mins;
    double secs;
    hrs = mins = secs = -1;
    sscanf_s(buffer, "%d:%d:%lf", &hrs, &mins, &secs);
    cout << "hrs:" << hrs << "\t"
        << "mins:" << mins << "\t"
        << "secs:" << secs 
        << endl;
    inpfile.ignore(80, '\n');
}
于 2009-12-22T02:11:17.680 に答える
0

ほとんどの場合、入力ファイルのどこかに末尾のコンマがあります。または、行の最後の数字の後に14文字を超える空白が含まれている可能性があります。

于 2009-12-22T03:02:47.623 に答える