我正在用 C++ 实现自定义词法分析器,当尝试读取空白时,ifstream 不会将其读出。我正在使用 >>>
逐个字符地阅读,所有的空格都消失了。有什么办法可以让 ifstream 保留所有空格并读给我听吗?我知道在读取整个字符串时,读取会停在空格处,但我希望通过逐个字符读取,可以避免这种行为。
尝试过:.get()
,很多答案都推荐,但是效果和std::noskipws
是一样的,就是我现在得到了所有的空格,但不是我需要对某些结构进行词法分析的换行符。
这是有问题的代码(扩展注释被截断)
while(input >> current) {
always_next_struct val = always_next_struct(next);
if (current == L' ' || current == L'\n' || current == L'\t' || current == L'\r') {
continue;
}
if (current == L'/') {
input >> current;
if (current == L'/') {
// explicitly empty while loop
while(input.get(current) && current != L'\n');
continue;
}
我在 while
行中断并查看 current
的每个值,以及 \r
或 \n
绝对不在其中 - 输入只是跳到输入文件中的下一行。
最佳答案
有一个操纵器可以禁用空格跳过行为:
stream >> std::noskipws;
关于c++ - 从 ifstream 读取不会读取空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59430176/