从file中读取,gcount()总是0,即使在几个file.get()之后

reading from file, gcount() is always 0 even after several file.get()

本文关键字:file 几个 之后 get 总是 读取 gcount      更新时间:2023-10-16

我试图从使用file.get()的文件中读取,但它似乎被卡在第一行。输入文件如下:

1234,56
7891,01
.......

这是我的代码:

char* n1 = new char[5];
char* n2 = new char[3];
std::ifstream data("input_file");
while (i < 4) {
    data.get(n1, 5);
    printf("%ldn", data.gcount());
    data.get(n2, 3);
    printf("%ldn", data.gcount());
    //read newline
    data.get(&ch, 2);
    printf("%ldn", data.gcount());
    printf("n1= %s, n2 = %sn", n1, n2+1);
}
输出:

0
0
0
n1= 1234, n2 = 56
0
0
0
n1= 1234, n2 = 56
0
0
0
n1= 1234, n2 = 56

我看不懂。

get(char*, streamsize)一旦遇到换行分隔符就会卡住。您需要使用getline()前进到下一行。

另外,您的第二个get()只从流中读取2个字符(即您将在第一行读取",5"而不是",56")。

这里有一个问题:

data.get(&ch, 2);

假设您之前在某处将ch定义为

char ch;

换行符将存储在ch中,但终止的''将写入ch之后的下一个地址,损坏碰巧驻留在那里的任何变量。

修改为:

char ch[2];
data.get(ch, 2);