簡體   English   中英

使用函數,數組和結構的輸入文件的getline

[英]getline with an input file using a function, array and structure

我正在為我的班級編寫一個程序,該程序需要一個文本文件並在文本中分配每一行。我遇到的問題是,當我使用getline()時,它會完全跳過輸入。 從我已閱讀的所有內容中,我感覺自己做得不錯,但顯然我遺漏了一些內容。這只是代碼的一小部分...如果您需要全部內容,我可以將其發布。感謝大家的幫助。

garage populategarage()
{
garage tg; //temporary garage
string instruction_prompt;

initialize_garage(tg);
ifstream inputFile;

inputFile.open("garage-input-file.txt");

for (int i = 0; i < NUM_OF_VEHICLES; i++)
{
    inputFile >> tg.vehicles[i].category;


    if (tg.vehicles[i].category == "\0")
        i = NUM_OF_VEHICLES;
    else
    {
        inputFile >> tg.vehicles[i].make;

        inputFile >> tg.vehicles[i].model;

        inputFile >> tg.vehicles[i].color;

        inputFile >> tg.vehicles[i].year;

        inputFile >> tg.vehicles[i].trans;

        inputFile >> tg.vehicles[i].cylinder;

        getline(inputFile, tg.vehicles[i].drive); //This is my problem

    }
}

您沒有顯示任何示例輸入或結果,但是從您的描述看來,每個值似乎都顯示在自己的行上。 是這樣嗎? 在這種情況下, getline調用很可能會接聽前一個換行符(從您讀取cylinder ),並返回一個空字符串。

如果您的值顯示在單獨的行中,則可能應該對每個行使用getline 您可以將任何類型的此行為包裝到模板函數中-類似於以下內容:

template <class T>
istream & readValue( istream & s, T & value )
{
    string line;
    if( getline( s, line ) )
    {
        istringstream iss( line );
        iss >> value;
    }
    return s;
}

相反,如果你的文件中包含的每個條目單行線,那么它通常是更好地使用getline整條生產線,然后從讀取各個值istringstream

for (int i = 0; i < NUM_OF_VEHICLES; i++)
{
    string line;
    if( !getline( inputFile, line ) ) break;
    istringstream iss( line );

    iss >> tg.vehicles[i].make;
    iss >> tg.vehicles[i].model;
    // etc...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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