[英]c++ Why does a .ignore() function not work properly?
如果數字大於0且小於50,數字列表進入堆棧。如果數字大於50且小於100,則數字進入隊列。如果數據不是數字,我想丟棄並轉到下一個閱讀。 這是我遇到一些問題的地方。
這是我用來處理數字文件的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,'\\ n')會跳到下一行。 根據c ++文檔,.ignore應該跳到下一行。 我假設我錯誤地使用了忽略函數。 還是有更好的方法,而不使用.ignore跳過包含的任何不良數據,並繼續從這樣的文件中讀取數字?
infile.ignore(1, '\\n')
將最多忽略一個字符。
試試這個代替:
infile.ignore(std::numeric_limits<std::streamsize>::max(), '\\n');
這將忽略體系結構可以計數的盡可能多的字符,但是在遇到換行符或文件結尾后將停止忽略。
std::numeric_limits
在<limits>
定義
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.