c++ - 从 ifstream 读取不会读取空格

标签 c++ c++11

我正在用 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/

相关文章:

c++ - 将工作项添加到数组或列表的非阻塞方式

c++ - 强制转换为 &(void*&)variable 与 (void**)variable 的区别

c++ - Eigen Sparse LU 求解器返回值

c++ - 使用左值映射 move 位置

并发环境中的 C++11 std::vector

c++:为什么执行回调但不执行回调定义之前的函数?

C++ : forward declaring const with internal linkage

c++ - std::common_type 实现

c++ - 函数参数的嵌套模板参数和 cv- 和 ref- 限定符

c++ - 这个程序为什么要等 10 秒而不是倒计时?