#include <iostream>
#include <fstream>
#include <string>
struct textbook //Declare struct type
{
int ISBN;
string title;
string author;
string publisher;
int quantity;
double price;
};
// Constants
const int MAX_SIZE = 100;
// Arrays
textbook inventory[MAX_SIZE];
void readInventory()
{
// Open inventory file
ifstream inFile("inventory.txt");
// Check for error
if (inFile.fail())
{
cerr << "Error opening file" << endl;
exit(1);
}
// Loop that reads contents of file into the inventory array.
pos = 0; //position in the array
while (
inFile >> inventory[pos].ISBN
>> inventory[pos].title
>> inventory[pos].author
>> inventory[pos].publisher
>> inventory[pos].quantity
>> inventory[pos].price
)
{
pos++;
}
// Close file
inFile.close();
return;
}
您好,
我需要这个功能的帮助。此函数的目标是从txt文件中读取信息并将其读入数组结构中以获取教科书。 文本文件本身已按正确的循环顺序设置。
我的问题是,对于标题部分,书的标题可能是多个单词,例如“我的第一本书&#34;例如。我知道我必须使用getline将该行作为一个字符串将其输入到标题&#39;数据类型。
我也错过了一个inFile.ignore(),但我不知道怎么把它放到循环中。
答案 0 :(得分:-1)
假设输入格式为:
ISBN title author publisher price quantity price
,即数据成员的行空格分隔,您可以为operator>>
定义struct textbook
,这可能类似于:
std::istream& operator>> (std::istream& is, textbook& t)
{
if (!is) // check input stream status
{
return is;
}
int ISBN;
std::string title;
std::string author;
std::string publisher;
int quantity;
double price;
// simple format check
if (is >> ISBN >> title >> author >> publisher >> quantity >> price)
{
// assuming you additionally define a (assignment) constructor
t = textbook(ISBN, title, author, publisher, quantity, price);
return is;
}
return is;
}
然后阅读您的文件,您只需:
std::ifstream ifs(...);
std::vector<textbook> books;
textbook b;
while (ifs >> b)
{
books.push_back(b);
}
关于getline()
的使用,请参阅此answer。