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);