C++ 有人能给我解释一下当你读文件时到底发生了什么吗?

C++ 有人能给我解释一下当你读文件时到底发生了什么吗?,c++,c++11,C++,C++11,当您在条件下使用while循环时,它是如何工作的!fin.eof()?如果我的循环包含一个类似fin.get(ch)的语句,其中ch是char类型的,该怎么办 指针究竟如何移动,何时更新 如果在文件的开头,指针指向第一个元素。它是否在第一次迭代中转移到第二个元素 fin.eof()递增指向输入缓冲区中下一个字符的指针。这可能包括换行符或其他隐藏字符,它们位于您所期望的内容之后。 “它从当前流位置(包括第一个换行符)读取字符,直到流结束,或直到读取的字符数等于n–1(对于FGET),以先到者为准

当您在条件
下使用while循环时,它是如何工作的!fin.eof()
?如果我的循环包含一个类似fin.get(ch)的语句,其中ch是char类型的,该怎么办

  • 指针究竟如何移动,何时更新
  • 如果在文件的开头,指针指向第一个元素。它是否在第一次迭代中转移到第二个元素
fin.eof()递增指向输入缓冲区中下一个字符的指针。这可能包括换行符或其他隐藏字符,它们位于您所期望的内容之后。 “它从当前流位置(包括第一个换行符)读取字符,直到流结束,或直到读取的字符数等于n–1(对于FGET),以先到者为准。”(from)

我发现了

while (getline(fin,sent))
通常效果更好
(请参阅)

这取决于您在循环中所做的工作……”“它是如何工作的”—它不起作用<代码>而(!fin.eof())永远都是不正确的。为了进一步@KerrekSB s point@KerrekSB well,它可能是正确的,但无论如何避免它是好的。@M.M:Hm.我想说检查条件
fin.eof()
有它的用途(例如,当与
>std::ws
结合时),但是整个循环
而(!fin.eof())
似乎是假的:如果您只是丢弃整个流,那么请使用
忽略
,否则在循环中一定会发生一些操作来更改流的EOFness,并且需要检查该操作是否成功。我想您的意思是在开始时使用
fin.get(ch)
,而不是
fin.eof()
;后者大概不会增加任何东西。