0

我想从文件输入中读取行并能够将变量分配给行的不同部分。

示例输入:

4 5.35  Wine Stoppers
2 14.85  Silver Cheese Trays

我想要一个变量,因为我需要将每行中的双精度乘以一个常数,然后将更新的行发送到一个新文件。

我不是要代码,我只是要更多我想要研究的功能来完成这样的任务。这是我在 C++ 中工作的第一周,所以我认为这是一些基本的东西,但是老师没有教我们在实验室中需要做什么。他确实让我包含,所以我觉得我需要字符串函数,但是我在网上搜索一些对我有用的函数时遇到了麻烦。

到目前为止我所拥有的(越野车):

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

// Accepts: N/A
// Returns: 0 if no error

int main(void){
    ifstream inputFile("order.txt");
    ofstream outputFile("inventory.txt");
    string line;
    char description;
    int quantity, retail;
    const double MARKUP = 2.4;
    while (getline(inputFile, line)){
        inputFile >> quantity >> retail >> description;
        outputFile << quantity << retail * MARKUP << description <<
            endl;
    }
    cout << "Inventory File created" << endl;
    inputFile.close();
    outputFile.close();

    return 0;
}
4

2 回答 2

1

您需要流插入运算符(即operator>>())或某种形式的格式化 I/O 功能。您可以使用其中任何一种,但就我们的目的而言,流插入运算符就足够了。对于您提供给插入运算符的每个参数,流将遍历其缓冲区中的每个字符并分配与参数类型对应的值。例如:

std::ifstream in("in.txt");

int x;
in >> x;

你应该知道这是如何工作的:

首先,流提取并丢弃前导空格,直到找到流中的第一个有效字符。解析后,如果字符对于 a 是正确的int,则将其提取为整数,并且流继续移动到下一个字符。如果不是,则将流置于错误状态。

你说你的文件看起来像这样:

4 5.35 Wine Stoppers 2 14.85 Silver Cheese Trays

因此,您将需要两个整数、两个浮点变量和四个字符串来进行提取。您可以按照值出现的顺序执行提取:

int a, b;
float f1, f2;
std::string wine, silver, trays, stoppers;

in >> a >> f1 >> wine >> stoppers >> b >> f2 >> silver >> cheese >> trays;

如果值在文件中以行格式出现,则应使用std::getline并循环。

于 2013-11-01T00:00:55.943 回答
1

查看标准库的 iostream 模块,它允许您使用文件流。特别是,您可能需要注意允许您逐行读取文件的 fstream 对象和允许您对字符串进行标记(根据分隔符拆分它们)的 stringstream 对象。祝你好运!

于 2013-10-31T23:39:52.390 回答