【发布时间】:2011-07-21 10:47:26
【问题描述】:
我在 C++ 中实现了一个自定义词法分析器,当尝试读取空白时,ifstream 不会读出它。我正在使用>> 逐个字符地阅读,所有的空格都消失了。有什么方法可以让 ifstream 保留所有的空白并把它读给我听?我知道在读取整个字符串时,读取将在空白处停止,但我希望通过逐个字符读取,我会避免这种行为。
尝试过:.get(),很多答案都推荐,但是效果和std::noskipws一样,就是我现在得到了所有的空格,但是不是换行符我需要 lex 一些结构。
这是有问题的代码(扩展 cmets 被截断)
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 绝对不在其中- 输入只是跳到下一行输入文件。
【问题讨论】:
-
如果您在 while 行中断,那么您肯定不会在
current中看到\n,就像get遇到\n您会在 continue 行而不是while 行。还是我误会了? -
L'\n'是 16 位wchar_t,而不是 8 位char,但这应该没有区别。 -
@Charles:然后它将停止中断并且不会开始显示文件下一行的内容。 @Rene:这是一个
wifstream。 -
对所有三个输入都使用
input.get()? -
@Rene:前两个完全按预期工作,没有空格可以跳过。