C++ 文件 I/O 函数
Posted
技术标签:
【中文标题】C++ 文件 I/O 函数【英文标题】:C++ file I/O functions 【发布时间】:2013-10-31 23:35:03 【问题描述】:我想从文件输入中读取行,并能够将变量分配给行的不同部分。
示例输入:
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;
【问题讨论】:
看看cppreference.com。 你的输入真的有引号吗? @Prashant no,你为我正确格式化了它。我这样做是因为这样做是有道理的。 【参考方案1】:您需要流插入运算符(即operator>>()
)或某种形式的格式化 I/O 功能。您可以使用其中任何一种,但就我们的目的而言,流插入运算符就足够了。对于您提供给插入运算符的每个参数,流将遍历其缓冲区中的每个字符并分配与参数类型相对应的值。例如:
std::ifstream in("in.txt");
int x;
in >> x;
您应该知道这是如何工作的:
首先,流提取并丢弃前导空格,直到找到流中的第一个有效字符。解析后,如果字符对于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
并循环。
【讨论】:
我更新以显示我拥有的代码。你能看出我做错了什么吗? @WorldDominator!= NULL
是错误且不需要的。此外,它下面的另一个getline
是错误的。它应该只是inputFile >> ...
谢谢。还有一个快速的问题。如何将“描述”作为一个对象阅读?基本上我想要的第二个 int 之后的所有内容都是字符串。
@WorldDominator 那么首先description
不能是char
。它应该是std::string
。此外,当您提取到retail
时,停止,然后使用std::getline(inputFile, description)
将其余行插入description
。【参考方案2】:
查看标准库的 iostream 模块,它允许您使用文件流。特别是,您可能需要注意允许您逐行读取文件的 fstream 对象和允许您标记字符串(根据分隔符拆分它们)的 stringstream 对象。祝你好运!
【讨论】:
以上是关于C++ 文件 I/O 函数的主要内容,如果未能解决你的问题,请参考以下文章