我有“in.txt”文件,其中包含2个字符串:
abcde
12345
我有我的代码:
#include <iostream>
#include <fstream>
int main() {
std::ifstream fileIn("in.txt", std::ios::in);
char* chPtr = new(char[10]);
char ch;
printf("fileIn.get()==EOF?: %d \n", (fileIn.get() == EOF)); // =0
std::cout << "fileIn.eof() = " << fileIn.eof() << "\n"; // =0
fileIn.getline(chPtr, 3);
std::cout << "chPtr-" << chPtr << "\n"; //output:"bc" (see 1.)
fileIn.get(ch);
std::cout << "ch-" << ch << "\n"; //(see 2.)
printf("fileIn.get()==EOF?: %d \n", (fileIn.get() == EOF)); // =1 (see 3.)
std::cout << "fileIn.eof() = " << fileIn.eof() << "\n"; // =0 (see 4.)
fileIn.close();
delete[] chPtr;
}
代码备注:
( 1。)第一个符号'a'被get()略高于吃掉;因此,这里读取了2个下一个符号,第三个符号,我想要读取的内容,getline()自动赋值'\ 0'(如果我理解正确的话)。
( 2。)以下是问题 - 这里是输出符号(代码为[-52])。不幸的是,我没有足够的声望发布图像=((这个符号就像2条垂直的白线,这一对的右线在中间有间隙)。 (有关信息:我每次都有这个符号,我正在尝试读取char变量char数组的未初始化元素。) 但为什么我会在那里?因为第一个字符串中仍然存在未经重复的符号。整个第二串!
( 3。)事实证明,光标突然移动到文件末尾。但为什么??我无法理解
( 4。)我们在这里仍然为零,因为(如果我理解正确的话)没有尝试在eof-line后面读取数据。光标刚刚移动到文件的最后一个符号后面,但不在文件结束边框之外。
答案 0 :(得分:1)
如果istream::getline
在达到count-1
之前设法阅读count
个字符(EOF
在您的示例中为3),则会设置failbit
。请参阅reference。
这意味着除非您清除标志,否则所有进一步的提取都将失败,而不是“光标移动到最后”。 ch
永远不会被初始化。