为什么我的向量中的成对元素输出错误?
Why are the paired elements in my vector outputting wrong?
就上下文而言,我正在为一家商店开发奖励系统程序。我有一个文件,其中包含一个项目列表,客户在每个项目的名称下方获得积分。以下是该文件包含的内容:
rolling papers
1
lighter
1
silicone pipe
5
glass pipe
8
water pipe
10
我正在尝试从文件中读取两个不同的变量,然后将这些变量存储在成对的向量中。但是我注意到,当我从向量中输出对时,项目的第一个字母丢失了,并且这些点完全消失了。我试图将点更改为 char 而不是 int,并在配对向量中做了同样的事情。两者都给出了类似的 inaccurate/strange 输出。我在这里做错了什么?谢谢你们。这是我的程序的一部分,我试图将 items/points 存储在配对向量中:
int answer;
int points;
std::string tempName;
std::string name;
std::string item;
std::ifstream inFS;
std::vector<std::string> nameList;
std::vector<std::pair<std::string, int>> pairedList;
std::cout << "Would you like to add points to a member's name? If not, input 0 to look at other options!" << std::endl;
std::cout<< "Otherwise, input 1 to continue to the point system." << std::endl;
std::cin >> answer;
if (answer == 0)
options();
if (answer == 1) {
inFS.open("items.dat");
if (inFS.is_open())
std::cout << "File opened successfully." << std::endl;
while (std::getline(inFS, item)) {
inFS >> points;
pairedList.push_back(make_pair(item, points));
}
if (!inFS.eof())
std::cout << "Not able to reach end of file" << std::endl;
inFS.close();
for (int i = 0; i < pairedList.size(); i++)
std::cout << pairedList[i].first << " " << pairedList[i].second << std::endl;
exit(1);
}
}
尝试将 inFS >> points
更改为另一个 std::getline(inFS, points_str)
(注意您需要一个 std::string points_str{};
);那么你可以做一个make_pair(item, std::stoi(points_str))
。 [Demo]
#include <iostream> // cout
#include <string> // getline, stoi
int main()
{
std::string item{};
std::string points{};
while (std::getline(std::cin, item))
{
std::getline(std::cin, points);
std::cout << "item = " << item << ", points = " << std::stoi(points) << "\n";
}
}
就上下文而言,我正在为一家商店开发奖励系统程序。我有一个文件,其中包含一个项目列表,客户在每个项目的名称下方获得积分。以下是该文件包含的内容:
rolling papers
1
lighter
1
silicone pipe
5
glass pipe
8
water pipe
10
我正在尝试从文件中读取两个不同的变量,然后将这些变量存储在成对的向量中。但是我注意到,当我从向量中输出对时,项目的第一个字母丢失了,并且这些点完全消失了。我试图将点更改为 char 而不是 int,并在配对向量中做了同样的事情。两者都给出了类似的 inaccurate/strange 输出。我在这里做错了什么?谢谢你们。这是我的程序的一部分,我试图将 items/points 存储在配对向量中:
int answer;
int points;
std::string tempName;
std::string name;
std::string item;
std::ifstream inFS;
std::vector<std::string> nameList;
std::vector<std::pair<std::string, int>> pairedList;
std::cout << "Would you like to add points to a member's name? If not, input 0 to look at other options!" << std::endl;
std::cout<< "Otherwise, input 1 to continue to the point system." << std::endl;
std::cin >> answer;
if (answer == 0)
options();
if (answer == 1) {
inFS.open("items.dat");
if (inFS.is_open())
std::cout << "File opened successfully." << std::endl;
while (std::getline(inFS, item)) {
inFS >> points;
pairedList.push_back(make_pair(item, points));
}
if (!inFS.eof())
std::cout << "Not able to reach end of file" << std::endl;
inFS.close();
for (int i = 0; i < pairedList.size(); i++)
std::cout << pairedList[i].first << " " << pairedList[i].second << std::endl;
exit(1);
}
}
尝试将 inFS >> points
更改为另一个 std::getline(inFS, points_str)
(注意您需要一个 std::string points_str{};
);那么你可以做一个make_pair(item, std::stoi(points_str))
。 [Demo]
#include <iostream> // cout
#include <string> // getline, stoi
int main()
{
std::string item{};
std::string points{};
while (std::getline(std::cin, item))
{
std::getline(std::cin, points);
std::cout << "item = " << item << ", points = " << std::stoi(points) << "\n";
}
}