【问题标题】:newline character read twice换行符读了两次
【发布时间】:2015-09-21 20:44:53
【问题描述】:

我正在为我的一个课程编写标记器,但在读取文件时遇到了问题。

以这样的输入为例:

00 'this has a  
01 Return  
02 The end''s near

这是预期的输出:

(UNDEFINED,"'this has a  
Return  
The end''s near  
",1)  

但这是我得到的输出:

(UNDEFINED,"'this has a  
Return  
The end''s near  

",1)  

这是代码的一部分:

void readString(int& lineNumber, vector<Token*>& tokenList, ifstream& in)
{
char symbol;
int startingLineNumber = lineNumber;
string comment = "\'";
in.get(symbol);
do {

    switch (symbol) {
        case '\n':
            lineNumber++;
            comment += symbol;
            symbol = ' ';
            break;
        case '\'':
            if (in.peek() == '\'') {
                comment += symbol;
                in.get(symbol);
                comment += symbol;
            }
            else
            {
                comment += symbol;
                Token *newToken = NULL;
                newToken = new Token("STRING", comment, startingLineNumber);
                tokenList.push_back(newToken);
                return;
            }
            break;
        default:
            comment += symbol;
    }
} while (in.get(symbol));
readUndefined(comment, startingLineNumber, tokenList);
}

如果有人能帮我弄清楚为什么会这样,我将不胜感激。

谢谢

【问题讨论】:

  • 我认为没有理由将fstream 传递给函数,一个普通的istream 就足够了。然后,您可以使用字符串流来完成所需的最小示例或为此函数编写实际的单元测试。

标签: c++ char newline


【解决方案1】:

do...while 错了! 您应该将do...while 转换为while 并在循环外检查first symbol,或从循环中检查last symbolbreak

【讨论】:

  • 感谢您的回复。第一个符号和最后一个符号是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多