C++ 从文本文件中读取,双精度行
C++ Read from a text file, lines of double
我正在尝试用C++编写一个程序,该程序将从文本文件中读取并写入文本文件。读取的文本文件的第一行将包含天数 (int),后跟不同行上的三个销售人员的名字和姓氏。然后,它将有足够的数据行(双倍)来为每个销售人员提供给定周数的每日销售额: 示例文本文件如下所示:
2 // number of days, could change
sales person1 //first sales person's first and last name
sales person2
sales person3
11.45 30.23 34.56 37.84 45.96 //first day of sales for sales person1
20.45 33.0 22 11 26.87 90 //first day of sales for sales person2
33.57 40 20.87 23.9 45.8 //first day of sales for sales person3
56.6 75.8 39.0 23.3 10 //second day of sales for sales person1
40.34 54.2 12.4 43.5 23
23 45.6 75.34 27.45
我已经读了三个销售人员的名字。但是我不知道如何阅读每行中的替身,因为它们对应于每行中的不同销售人员。不过,我只需要每行的总计。我应该怎么做?以下代码是我到目前为止所拥有的。请有人帮忙!
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>
#include<cctype>
using namespace std;
void get_input(char input_file[]);
void get_output(char output_file[]);
void readFile(char name[]);
string getName(ifstream &in);
void writeFile(char output[]);
int main()
{
ifstream in;
char input_file[30];
char output_file[30];
get_input(input_file);
get_output(output_file);
//int total = readFile(input_file);
writeFile(output_file);
}
void get_input(char input_file[])
{
cout << "Enter name of the input file: ";
cin >> input_file;
}
void get_output(char output_file[])
{
cout << "Enter name of the output file: ";
cin >> output_file;
}
void readFile(char fileName[])
{
int weeks;
double total1 =0, sales1, total2 = 0, sales2, total3 = 0, sales3;
ifstream in;
in.open(fileName);
if(in.fail())
{
cout << " failed to open the input file" << endl;
exit(-1);
}
in >> weeks;
cout << "Total weeks processed: " << weeks << endl;
string name1 = getName(in);
cout << name1 << endl;
string name2 = getName(in);
cout << name2 << endl;
string name3 = getName(in);
cout << name3 << endl;
int i = 1;
/*do // this is where i want to process the sales and get the total
{
in >> sales1;
total1 = total1 + sales1;
in >> sales2;
total2 = total2 + sales2;
in >> sales3;
total3 = total3 +sales3;
} while(i <= 3);*/
in.close();
}
string getName(ifstream &in)
{
string first, last;
in >> first >> last;
return first + " " + last;
}
void writeFile(char output[])
{
ofstream out;
out.open(output);
out.close();
}
您可以使用"getline"将一行读入字符串,然后将该字符串用作输入流。下面是一个示例代码,读取 3 行双精度值并打印每行的总和。
#include <iostream>
#include<string>
#include <fstream>
#include <sstream>
using namespace std;
int main() {
ifstream fin("data.txt");
string s;
//read a line into 's' from 'fin' each time
for(int i=0; i<3 && getline(fin,s); i++){
//use the string 's' as input stream, the usage of 'sin' is just like 'cin'
istringstream sin(s);
double sum = 0.0, tmp;
while(sin>>tmp){
sum += tmp;
}
cout<<sum<<endl;
}
return 0;
}
您需要将问题分解为较小的块。像这样薄:
- 我如何获得人们的名字?(听起来你已经想通了)
- 我怎么知道每个人的路线是哪条线?(有一个简单的模式)
- 如何将文本行(字符串)转换为数值(双精度)
如果你把你的循环切换成这样的东西,你应该很好。这是假设你想要每个人的总计。如果你想让每个人每周的总分手,你必须做一些不同的事情:
int totals[] = {0,0,0};
string line;
//for each week
for(int i = 0; i > weeks; i++)
{
//for each person
for(int j = 0; j >= 2; j++)
{
getline(in, line);
totals[j] += getLineTotal(line);
}
//skip blank line. this will not be valid if the text file isn't formatted to have
//lines that follow double, double, double, blank...
getline(in, line);
}
。
double getLineTotal(string line)
{
double sum, dubVal;
sum = 0;
while(line >> dubVal){
sum += tmp;
}
return sum;
}
相关文章:
- 正在将csv文件读取为双精度矢量
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 如何从char16_t字符串文字中读取双精度?
- 从.txt文件读取到C++中的双精度向量
- 警告:左移计数 >= 在 C++ 中将字节流读取为双精度变量时的类型宽度
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- 为什么当我使用双精度时,Qt<->Matlab 正确写入和读取我的字节,但存储 uint32 的字节不正确?
- 为什么 i(f)流无法读取双精度
- 从二进制文件中保存的 4 字节双精度读取 8 字节双精度
- 如何从二进制文件中读取双精度并将其保存在向量中
- 有没有办法更有效地将二进制双精度从文件读取到浮点数组中
- 如何在OpenCV中将图像读取为双精度
- 使用 sscanf 读取双精度时忽略"E"
- C++ - 从文件读取到双精度
- C++ 从文本文件中读取,双精度行
- 从C++中的文本文件中逐行读取,如何确保输入是双精度的
- 从文件中读取长双精度,然后写入另一个文件
- 从十六进制数组读取双精度到向量
- 什么更贵?读取或比较整数,双精度