簡體   English   中英

為什么一個.ignore()函數不能正常工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM