如果数字大于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跳过包含的任何错误数据并继续从这样的文件中读取数字?
答案 0 :(得分:1)
infile.ignore(1, '\n')
最多会忽略一个字符。
试试这个:
infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
这会忽略架构可以计算的多个字符,但在遇到换行符或文件结尾后会停止忽略。
std::numeric_limits
在<limits>