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 调试器检查缓冲区中的内容时,我看到它已经读入\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 回答