从文件中读取,即使在几个file.get()之后,gcount()始终为0

时间:2013-05-14 15:35:22

标签: 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, 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);
}

输出:

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

我无法理解这一点。

2 个答案:

答案 0 :(得分:0)

这里有一个问题:

data.get(&ch, 2);

假设您之前已将ch定义为

char ch;

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

将其更改为:

char ch[2];

data.get(ch, 2);

答案 1 :(得分:0)

get(char *,streamsize)在遇到换行符分隔符后立即卡住。 你需要使用getline()前进到下一行。

另外,你的第二个get()只能从流中读取2个字符(即你将读取&#34;,5&#34;而不是&#34;,56&#34;为你的第一行。