【发布时间】:2014-02-24 13:53:49
【问题描述】:
我有包含 2 个字符串的文件“in.txt”:
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 个下一个符号,以及我想要读取的第 3 个符号,getline() 自动分配值 '\0'(如果我理解正确的话)。
(2.)这是问题 - 这里输出符号(代码 [-52])。不幸的是,我没有足够的声誉来发布图片 =((这个符号就像 2 条垂直的白线,这对的右线在中间有间隙)。 (供参考:我每次都得到这个符号,我试图将 char 数组的未初始化元素读取到 char 变量中。) 但为什么我得到它?因为第一个字符串和整个第二个字符串中仍有未读符号!
(3.) 原来,光标突然移动到文件末尾。但为什么??看不懂
(4.) 我们这里仍然为零,因为(如果我理解正确的话)没有尝试读取 eof 行后面的数据。光标只是移动到文件的最后一个符号后面,但没有超出文件结束边界)。
【问题讨论】:
-
我完全不知道你在问什么。
-
我问过(如果简洁的话),为什么在声明 fileIn.get(ch); 之后我没有得到 ch=='d',但是 ch== 字符代码为 -52 //i.e. (int)ch ==-52
标签: c++