簡體   English   中英

使用getline()從文件中讀取多行

[英]Reading multiple lines from a file using getline()

我試圖讀入然后輸出三行文本文件的內容,如下所示:

鮑勃迪倫10 9

約翰列儂8 7

大衛鮑伊6 5

對於每一行,我只想輸出行,即firstName LastName number1 number2。

我正在使用以下代碼:

int num1;
int num2;
string firstName;
string lastName;
string fullName; 
ifstream inFile;

inFile.open("inputFile.txt");

while (getline(inFile, firstName))
    {
        inFile >> firstName >> lastName >> num1 >> num2;

        fullName = firstName + " " + lastName;

        cout << fullName << " " << num1 << " " << num2 << endl;
    }

inFile.close();

這個輸出有2個問題。 首先,第一行不輸出,雖然從實驗中我知道它已讀入。其次,在讀入並輸出最后兩行(根據需要)后,程序顯示最后一行中的所有內容除了名字外(在這種情況下,它打印的最后一件事是Bowie 6 5)。

有人可以使用這個簡單的例子來解釋當從文件中讀取多行時getline函數的工作原理嗎? (我甚至不知道這是不是最好的方式,但這是我所知道的唯一方式)。 以下是一些具體問題。

首先,while循環條件getline(inFile,firstName)是否返回一個布爾值? 如果是這樣,如果我沒有給firstName一個值,它怎么可能是真的(即while循環如何開始)? 如果程序讀取第一行並且是否存在某些內容,那么它會執行while循環,但是從第二行開始,因為它已經使用了第一行檢查內容?

其次,如果firstName確實有一個值,並且該值是第一行的第一個名稱(在本例中為“Bob”),為什么不是第一行輸出呢? 我一直絞盡腦汁想弄清楚它去了哪里。

第三,在程序讀入並顯示最后兩行之后,程序移動到下一行並且只遇到空白,對吧? 那么firstName的值是多少? 它會是空白,還是仍然是“大衛”? 如果它是空白的,為什么while循環再次執行? 但如果它是“大衛”,那么為什么該程序不能與其他人一起輸出該值?

順便說一句,我正在制作一本教科書(不是作業),它涵蓋了getline,但不適用於多行。 但是練習涉及多行,所以我有點迷失。

您試圖兩次讀取每一行。

while (getline(inFile, firstName)) // reads the line
    {
        // reads the next line and overwrites firstName!
        inFile >> firstName >> lastName >> num1 >> num2;

將其更改為:

while ( inFile >> firstName >> lastName >> num1 >> num2 )
{
    fullName = firstName + " " + lastName;
    cout << fullName << " " << num1 << " " << num2 << endl;
}

編輯:回答你的問題:

getline()如何工作?
將整行讀取到'\\ n'字符或指定的分隔字符。 http://www.cplusplus.com/reference/string/string/getline/?kw=getline

讀取該行后,控件轉到文件中的下一行。
此外,如果讀取操作成功,則返回布爾值true,否則返回false。

默認情況下,提取運算符會截斷所有空格。 它還返回一個布爾值,指示操作是否成功。

暫無
暫無

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

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