将文件中的数据存储到数组 C++

Storing data from a file into array C++

我想使用 C++ 将下面的 txt 文件存储到几个数组中,但我不能这样做,因为项目名称的白色 space 会影响存储。

Monday //store in P1 string
14-February-2022 //store in P2 string
Red Chilli //store in P3 array, problem occurs here as i want this whole line to be store in the array 
A222562Q //store in P4 array
1.30 2.00 //store in P5 and P6 array
Japanese Sweet Potatoes //repeat storing for Item 2 until end of the file
B807729E
4.99 1.80
Parsley
G600342k
15.00 1.20

下面是我尝试将数据存储在数组中的编码。这可能不是最好的方法。可以为我提供更好的方法来存储数据。谢谢

ifstream infile;
infile.open("itemList.txt");
infile >> P1;
infile >> P2;

for (int i = 0; i < sizeof(P3); i++) {
    
    infile >> P3[i];
    infile >> P4[i];
    infile >> P5[i];
    infile >> P6[i];

}

您可以在 P3 字段中使用 std::getline 而不是 operator>>

constexpr int NumOfEntries = 3;
std::array<std::string, NumOfEntries> P3;
// ... and assuming P4, P5, P6 are declared similarly above
for (int i = 0; i < NumOfEntries; i++) {
    
    std::getline(infile, P3[i]);
    infile >> P4[i];
    infile >> P5[i];
    infile >> P6[i];
    infile.ignore();
}

你没有显示 P3 到 P6 的定义,你的 for 循环中的 i < sizeof(P3) 条件看起来很奇怪 - 我无法为 P3 提出声明然后循环将正常工作。但显然您之前已经知道文件中有多少条目,对吧?所以我使用 std::vector<std::string> 作为 P3,并使用常量 NumOfEntries 作为循环条件。

要求

cin.ignore()忽略P6输入后的换行符;否则下一个 getline 只会在下一个回合传递一个空字符串。有关详细信息,请参见示例 this other question