使用getline()从文件中读取输入(带空格)到一个结构中

Using getline() to read input (with spaces) from file into a structure

本文关键字:一个 结构 空格 读取 getline 文件 使用 输入      更新时间:2023-10-16

我目前在一个c++数据结构类,我对c++非常陌生。这里我的目标是从文件中读取行并将它们存储到一个结构中。这些线条包含了一本书的元素。我的问题是有些行有空格,我不确定如何正确地将它们读入结构中。我似乎不能正确地使用getline()来读取结构的每个元素的行。如果我按原样运行它,我得到消息error: expected primary expression before 'infile'。抱歉,如果这篇文章的格式不正确,这也是我的第一个堆栈溢出的帖子!任何帮助吗?

我的结构是这样的:

typedef struct book {
    char title[100];
    char author[100];
    char publisher[100];
    float price;
    char isbn[100];
    int pages;
    int copies;
} Book;

我是这样把行读入结构的:

for (int i=0; i < currentIndex; i++) {
    getline(ifstream infile, my_book[i].title);
    getline(ifstream infile, my_book[i].author);
    getline(ifstream infile, my_book[i].publisher);
    getline(ifstream infile, my_book[i].price);
    getline(ifstream infile, my_book[i].isbn);
    getline(ifstream infile, my_book[i].pages);
    getline(ifstream infile, my_book[i].copies);
    currentIndex++;
}

文本文件将包含如下所列的图书信息:

Magician: Apprentice
Raymond E. Feist
Spectra (January 1, 1994)
5.02
0553564943
512
1

1 -首先在for循环外声明infile,然后再使用它。

2 - getline(inffile, book[i]....)不是inffile .getline(book[i]…、大小. .)第一个用于类string,第二个用于字符数组。

所以你的程序可能看起来像:

ifstream infile("data.txt", ios::in); // your data file
for (int i=0; i < currentIndex; i++)
{
       infile.getline(my_book[i].title    , 100, 'n');
       infile.getline(my_book[i].author   , 100, 'n');
       infile.getline(my_book[i].publisher, 100, 'n');
       infile >> my_book[i].price;
       infile.getline(my_book[i].isbn     , 100, 'n');
       infile >> my_book[i].pages;
       infile >> my_book[i].copies;
       currentIndex++;
}
相关文章: