使用 getline() 将文件中的输入(带空格)读取到结构中
Using getline() to read input (with spaces) from file into a structure
我目前在学习 C++ 数据结构 class,我对 C++ 非常陌生。我的目标是从文件中读取行并将它们存储到一个结构中。这些行包含一本书的元素。我的问题是有些行有空格,我不确定如何将它们正确读入结构。我似乎无法正确使用 getline()
将行读入结构的每个元素。如果我按原样 运行,我会收到消息 error: expected primary expression before 'infile'
。抱歉,如果此 post 格式不正确,这也是我的第一个堆栈溢出 post!有帮助吗??
我的结构是这样的:
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(infile, book[i]....) 不是 infile.getline(book[i]... , size,..)
第一个与 class 字符串一起使用,第二个与字符数组一起使用。
因此您的程序可能如下所示:
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++;
}
我目前在学习 C++ 数据结构 class,我对 C++ 非常陌生。我的目标是从文件中读取行并将它们存储到一个结构中。这些行包含一本书的元素。我的问题是有些行有空格,我不确定如何将它们正确读入结构。我似乎无法正确使用 getline()
将行读入结构的每个元素。如果我按原样 运行,我会收到消息 error: expected primary expression before 'infile'
。抱歉,如果此 post 格式不正确,这也是我的第一个堆栈溢出 post!有帮助吗??
我的结构是这样的:
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(infile, book[i]....) 不是 infile.getline(book[i]... , size,..) 第一个与 class 字符串一起使用,第二个与字符数组一起使用。
因此您的程序可能如下所示:
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++;
}