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