C ++初学者项目,帮助让程序从某些行开始读取。
我们有一个输入txt文件,其中包含一些客户信息:名称,地址,两个数字,每个部分占一行。我们需要读取文件,打印出名称,地址,用数字进行一些计算,并将所有三个输出发送到输出文件。
txt文件包含3个案例(9行)。
我可以阅读一个案例,但是在写一个可以通过三个案例的循环时遇到了麻烦。我怎样才能告诉c ++它需要从第四行的开头开始并执行与第一种情况相同的迭代?以下是我对第一个案例的处理。
getline(infile, customerName);
getline(infile, customerAddress);
infile >> sqFeetOfTile >> costPerSqFt;
答案 0 :(得分:2)
听起来你实际上并不想开始在第四行阅读(跳过三行),但是你想要阅读三行,然后继续第四行。
在这种情况下,您唯一的问题是,阅读这些数字并不会消耗跟随它们的换行符,因此当您getline
之后,单独的换行符将成为第一行"行&#34 ;,之后不久,当您尝试将地址读入sqFeetOfTile
时,您会遇到错误。
执行此操作的最佳方法是始终阅读完整的行
如果一行包含多个部分,请将其转换为std::istringstream
并从中读取部分
此方法不会在流中留下任何杂散换行符,您可以从第一个记录停止的位置继续。
像这样:
void processOneCustomer(std::istream& infile)
{
std::string customerName;
std::getline(infile, customerName);
std::string customerAddress;
std::getline(infile, customerAddress);
std::string numbers;
std::getline(infile, numbers);
std::istringstream numberstream(numbers);
float sqFeetOfTile = 0;
int costPerSqFeet = 0;
numbers >> sqFeetOfTile >> costPerSqFt;
// Output customer data
// Do calculations
}
// ...
while (inFile)
{
processOneCustomer(inFile);
}
(当然,真正的代码应该检查错误和类似的东西。)
如果你想跳过前三行,只需拨打std::getline
三次。