我试图读入然后输出三行文本文件的内容,如下所示:
鲍勃迪伦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,但不适用于多行 . 但是练习涉及多行,所以我有点迷失 .