c ++为什么.ignore()函数不能正常工作?

时间:2016-03-29 23:14:14

标签: c++ file stack queue

如果数字大于0且小于50,则数字列表将转到堆栈。如果数字大于50且小于100,则数字将进入队列。如果数据不是数字,则I想要丢弃它并转到下一个阅读。这是我遇到一些问题的地方。

这是我用来处理数字文件的while循环:

while (infile)
{
    infile >> number; //takes in a number
    if (0 < number && number < 50)
    {
        PushToStack(number); // pushed to stack
    }
    else if (50 < number && number < 100)
    {
        PushToQueue(number); // pushes to queue
    }
    else
    {
        // discard and move to next read
        infile.ignore(1, '\n');
    }
}

我现在已经测试了几次这段代码并且我已经产生了以下输出:

Pushed To Stack: 12
Pushed To Stack: 44
Pushed To Stack: 23
Pushed To Queue: 55
Pushed To Queue: 55

只要一个字母(比方说n)包含在集合中,它就不会继续读取其他数字,它也会重复最后一个数字。我以为infile.ignore(1,&#39; \ n&#39;)会跳到下一行。根据c ++文档,.ignore应该跳到下一行。我假设我错误地使用了忽略功能。或者是否有更好的方法,不使用.ignore跳过包含的任何错误数据并继续从这样的文件中读取数字?

1 个答案:

答案 0 :(得分:1)

infile.ignore(1, '\n')最多会忽略一个字符。

试试这个:

infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

这会忽略架构可以计算的多个字符,但在遇到换行符或文件结尾后会停止忽略。

std::numeric_limits<limits>

中定义