从文件(.dat)读取进行计算然后输出到新文件

时间:2016-02-22 10:08:29

标签: c++ multidimensional-array file-io

我需要读取marks.dat文件并将该文件输出到屏幕上。

marks.dat

23468555 88 55 67
55223344 45 90 78
32321111 67 89 73
77001234 79 59 99
21324354 62 84 88
40450765 34 45 56
26726826 93 69 71
30917823 57 65 80
54277888 87 77 55

8位数字表示学生编号,以下3个2位数字代表作业标记,计算贡献40%年份标记的3个平均值,找到贡献60%的最高分数。年份标记,然后输出学生编号,然后是平均值,然后是年份标记,即

yearmark.dat

23468555 70.00 80.80

平均值和年份标记应为 double 类型,并且在小数点后仅显示2位数字,然后输出到文件并在屏幕上显示内容。

我遇到的问题是尝试输出8位数字输出234686e + 007的 double ,但是如果它的 int ,则输出正确。< / p>

还想看看你将如何解决这个问题。你会尝试创建一个数组来插入文件的内容,是想2-d,第一个学生编号,然后是第二维中的标记?

1 个答案:

答案 0 :(得分:1)

要仅打印双倍的2位数字,您可以利用标准库的输入/输出操纵器:

#include <iostream>
#include <iomanip>  // for fixed and setprecision

// ... 
double x = 89.12345678;
double y = 67.77777777;

// to print out "89.12 67.78":
std::cout << std::fixed << std::setprecision(2) << x << ' ' << y << '\n';

学生编号应该是int(或某些情况下为string),而不是double,但如果您想在小数点后打印一个没有任何数字的双精度数:

double n = 23468555;
std::cout << std::fixed << std::setprecision(0) << n << '\n';

作为您的任务的建议,我避免使用2D数组(以及一般的数组)。

创建一个类(或结构,它是相同的)来收集学号和平均值,然后将您读取的所有数据存储在std::vector个结构中。

如果您还不知道我正在谈论的内容......定义3个阵列来存储数字。