getline()和vector (c++)的问题
Issues with getline() and vectors (C++)
我试图从文本文件中获取输入,并使用getline()将数据放入四个向量中。该文件包含两个字符串,一个双精度字符串和一个整数,它们都在不同的行上,每一组用空行分隔。
if (userChoice == 1) // Load
{
in_stream.open("Lab11.txt");
if (in_stream.fail())
{
cerr << "File does not exist" << endl;
system("PAUSE");
exit(1);
}
index = 0;
do
{
getline(in_stream, itemNumb[index]);
getline(in_stream, itemName[index]);
getline(in_stream, itemCost[index]);
getline(in_stream, itemQuant[index]);
index++;
} while (! in_stream.eof());
in_stream.close();
itemStored = 0;
cout << "Items stored: " << itemStored << endl;
}
itemNumb和itemName为字符串向量,itemCost为双精度型,itemQuant为整型。字符串类型的行不会给出错误,但双精度类型和整型类型的行给出了相同的错误,类型根据它是哪个向量而改变。
错误:
调用getline(std::ifstream&, double&)'|
任何帮助都将非常感激!编辑:完整代码
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
void Add(vector<string>& itemNumb, vector<string>& itemName, vector<double>& itemCost, vector<int>& itemQuant, string name, string numb, double cost, int quant, int length, int index);
void Search(vector<string>& itemNumb, vector<string>& itemName, vector<double>& itemCost, vector<int>& itemQuant);
void List(vector<string> itemNumb, vector<string> itemName, vector<double> itemCost, vector<int> itemQuant, int length, int index);
int main()
{
ifstream in_stream;
ofstream out_stream;
vector<string> itemName, itemNumb;
vector<double> itemCost;
vector<int> itemQuant;
string name = "000", numb = "000";
double cost = 0.0;
int quant = 0, length = 0, index = 0;
int userChoice, itemStored;
do
{
cout << "===========================" << endl << "1) Load" << endl << "2) Add" << endl <<
"3) Search" << endl << "4) List" << endl << "5) Save" << endl << endl << "0) Exit" << endl;
cout << "Choose an option" << endl;
cin >> userChoice;
if (userChoice == 1) // Load
{
in_stream.open("Lab11.txt");
if (in_stream.fail())
{
cerr << "File does not exist" << endl;
system("PAUSE");
exit(1);
}
index = 0;
do
{
getline(in_stream, itemNumb[index]);
getline(in_stream, itemName[index]);
in_stream >> itemCost[index];
in_stream >> itemQuant[index];
index++;
} while (! in_stream.eof());
in_stream.close();
itemStored = itemNumb.size();
cout << "Items stored: " << itemStored << endl;
}
else if (userChoice == 2) // Add
{
Add(itemNumb, itemName, itemCost, itemQuant, name, numb, cost, quant, length, index);
itemStored++; // Function seems to sort oddly when strings of varying lengths are compared
cout << endl;
cout << itemStored << " items stored" << endl;
cout << endl;
}
else if (userChoice == 3) // Search
{
Search(itemNumb, itemName, itemCost, itemQuant);
}
else if (userChoice == 4) //List
{
List(itemNumb, itemName, itemCost, itemQuant, length, index);
}
else if (userChoice == 5) //Save
{
out_stream.open("Lab11.txt", ios::app);
if (out_stream.fail())
{
cerr << "File does not exist" << endl;
system("PAUSE");
exit(1);
}
index = 0;
length = itemNumb.size();
while (index != length)
{
out_stream << endl;
out_stream << itemNumb[index] << endl;
out_stream << itemName[index] << endl;
out_stream << itemCost[index] << endl;
out_stream << itemQuant[index] << endl;
index++;
}
out_stream.close();
}
}
while (userChoice != 0);
}
编辑的行文件io,导致运行时错误
do
{
getline(in_stream, tempstr1);
itemNumb.push_back(tempstr1);
getline(in_stream, tempstr2);
itemNumb.push_back(tempstr2);
in_stream >> tempdoub;
itemCost.push_back(tempdoub);
in_stream >> tempint;
itemQuant.push_back(tempint);
index++;
} while (! in_stream.eof());
in_stream.close();
std::getline
的第二个参数只能是std::basic_string<...>
。要读取int
和double
,您应该像这样使用重载的operator>>
:
in_stream >> itemCost[index] >> itemQuant[index];
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题