我的问题是我正在尝试从文本文件中输入char,string和int。我知道如何使用getline()输入,但是在使用get line()函数之后,不再有选项来输入字符串后面的其余整数。我的问题是,如何输入一个字符,然后输入一个字符串(带空格)后跟3个整数?
data.txt看起来像这样
a New York 5 7 9
b Virginia 10 2 5
c Los Angeles 25 15 6
这是我的代码:
int main()
{
string city;
double price;
int amt1, amt2, amt3;
char orderStatus;
ifstream warehouse;
ofstream output;
warehouse.open("data.txt");
output.open("dataOut.txt");
while (warehouse.good())
{
warehouse >> orderStatus;
output << orderStatus << "\t";
getline(warehouse, city, '\t');
//warehouse >> city;
output << city << endl;
//warehouse >> amt1;
//output << amt1 << "\t";
//warehouse >> amt2;
//output << amt2 << "\t";
//warehouse >> amt3;
//output << amt3;
}
warehouse.close();
output.close();
return 0;
}
感谢您的帮助。
答案 0 :(得分:1)
快速解决方案是使用atoi
(链接到文档)。这听起来像是家庭作业,所以我不想为你解决它(那里的乐趣在哪里?)但你可以将值拉成字符串。如果您需要,您也可以手动将字符一次转换为整数并重建数字,但atoi
将处理所有数字。我猜这些是std :: string,所以你必须在它们上面调用c_str()
,因为atoi只接受C字符串。
答案 1 :(得分:1)
这是我对您的代码的编辑。我添加了一个warehouse >> noskipws >> orderStatus >> skipws;
来跳过第一个制表符分隔符。此外,在每次读取后添加if(!warehouse.good()) break;
以防数据不完整。如果它是C,我已经完成了fscanf(file, " %c %[^\t]s %d %d %d", ...)
。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string city;
double price;
int amt1, amt2, amt3;
char orderStatus;
ifstream warehouse;
ofstream output;
warehouse.open("data.txt");
output.open("dataOut.txt");
while (warehouse.good())
{
warehouse >> orderStatus;
if(!warehouse.good()) break;
output << orderStatus << "\t";
// to skip the tab delimiter
warehouse >> noskipws >> orderStatus >> skipws;
if(!warehouse.good()) break;
getline(warehouse, city, '\t');
if(!warehouse.good()) break;
output << city << "\t";
warehouse >> amt1;
if(!warehouse.good()) break;
output << amt1 << "\t";
warehouse >> amt2;
if(!warehouse.good()) break;
output << amt2 << "\t";
warehouse >> amt3;
if(!warehouse.good()) break;
output << amt3 << endl;
}
warehouse.close();
output.close();
return 0;
}