繁体   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