C++ 从文件读取时,gcount()始终为0,即使在几个文件之后也是如此。get()

C++ 从文件读取时,gcount()始终为0,即使在几个文件之后也是如此。get(),c++,io,C++,Io,我试图使用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("%ld\n", data.gcount()); data.get(n2

我试图使用
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("%ld\n", data.gcount());
    data.get(n2, 3);
    printf("%ld\n", data.gcount());
    //read newline
    data.get(&ch, 2);
    printf("%ld\n", data.gcount());
    printf("n1= %s, n2 = %s\n", n1, n2+1);
}

我无法理解这一点。

这里有一个问题:

data.get(&ch, 2);
假设您已将
ch
定义为

char ch;
换行符将存储在
ch
中,但终止的
'\0'
将写入
ch
之外的下一个地址,从而损坏驻留在那里的任何变量

将此更改为:

char ch[2];

data.get(ch, 2);
get(char*,streamsize)在遇到换行分隔符时就会被卡住。 您需要使用getline()前进到下一行


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

如何定义
ch
呢?我猜它只是一个字符。是的,但即使更正了这一点,他仍然无法通过第一行,除非他使用getline()或其他形式的get()。如果找到定界字符,则它不会从输入序列中提取,而是作为要从流中提取的下一个字符保留在该序列中(请参阅getline以获取丢弃定界字符的替代方法)。但是为什么gcount()会这样做呢总是返回零?它不应该增加吗?@vivek是的,如果它真的提取了一些东西。一旦它被卡在线的末端,它就不会提取任何东西。
char ch[2];

data.get(ch, 2);