提问人:ahmed 提问时间:9/30/2023 最后编辑:ahmed 更新时间:9/30/2023 访问量:79
ifstream 在尝试读取前一个字符时卡在“\n”上
ifstream stuck on `\n` when trying to read the previous character
问:
我正在用 C++ 写一个脑解释器。它的语言功能之一是,在循环中,如果当前字节,则返回循环的开头,直到它是 .我的方法是逐个字符读取文件,而不是将整个文件加载到内存中。我习惯于回到上一个字符:!= 0
== 0
ifstream::seekg
[[nodiscard]] inline BFInstruction prev_inst()
{
if (m_file.eof())
m_file.clear(); // clear eof bit
m_file.seekg(-2, std::ios::cur); // -1 is the current char so -2 for the previous
return to_inst(static_cast<char>(m_file.get()));
}
在上一个字符与本例类似之前,一切都有效:\n
++++++[>++++++++<-
]>>++[>+++++<-]>[<<.+>>-]
m_file.get()
当当前位置是行的开头时,总是返回,而不是在本例中返回。我该如何解决这个问题?\n
-
更新
下面是一个可重现的示例:
main.cpp
#include <iostream>
#include <fstream>
char next(std::ifstream &f)
{
char next;
do
{
next = f.get();
} while (next == '\n');
return next;
}
char prev(std::ifstream &f)
{
f.seekg(-2, f.cur);
return f.get();
}
int main()
{
std::ifstream f("../example.txt");
std::cout << next(f) << '\n'; // `a`
std::cout << next(f) << '\n'; // `b` (because \n is ignored)
std::cout << prev(f) << '\n'; // '\n'
std::cout << prev(f) << '\n'; // `\n` again no matter how many times
// we call `prev()` when we would expect
// `a` to be the previous char
return 0;
}
example.txt
a
bc
答: 暂无答案
评论
CRLF
LF