gpt4 book ai didi

c++ - 使用 getline() 从文件中读取多行

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:59 25 4
gpt4 key购买 nike

我正在尝试读入然后输出一个三行文本文件的内容,如下所示:

鲍勃迪伦 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) 是否返回 bool 值?如果是这样,如果我还没有给 firstName 一个值,它怎么可能是真的(即 while 循环如何开始)?是不是程序读取第一行,如果那里有东西,那么它会执行 while 循环,但从第二行开始,因为它已经使用第一行来检查内容?

其次,如果 firstName 确实有一个值,并且该值是第一行中的名字(在本例中为“Bob”),为什么根本不输出第一行?我一直在绞尽脑汁想弄清楚它去了哪里。

第三,程序读入并显示最后两行后,程序移动到下一行,只遇到空白,对吗?那么 firstName 的值是多少?它会是空白的,还是仍然是“David”?如果是空白,为什么while循环又执行了一次?但如果它是“David”,那么为什么程序不将那个值与其他值一起输出呢?

顺便说一句,我正在研究一本教科书(不是为了家庭作业),它涵盖了 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

读取该行后,控件转到文件中的下一行。
此外,如果读取操作成功,它返回一个 bool 值 true,否则返回 false。

默认情况下,提取运算符会截断所有空格。它还返回一个 bool 值,指示操作是否成功。

关于c++ - 使用 getline() 从文件中读取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20756968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com