将文件中的数据存储到数组 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。
我想使用 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。