【问题标题】:Reading from a file(.dat) doing calculations then outputting into a new file从文件(.dat)中读取进行计算然后输出到一个新文件中
【发布时间】:2016-02-22 10:08:28
【问题描述】:

我需要读取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%分数的最高分年标记,然后输出学号,后跟平均数,再输出年标记,即

年标记.dat

23468555 70.00 80.80

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

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

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

【问题讨论】:

  • 很多 的文本根本与问题无关——也就是说,23468555 的打印会产生意想不到的结果。 实际问题几乎被隐藏了。关于如何打印该值的信息太少;像int main() { double x = 23468555; std::cout << x << std::endl; } 这样的东西至少会告诉我们你正在使用cout(而不是printf())。最后一段将是题外话,因为 SO 是关于可以“正确”回答的实际编程问题,而不是关于“如何解决这个问题”的讨论。
  • @DevSolar 该问题及其答案是关于以 full 精度输出双精度数。 OP 只需要 2 位数字,并且没有明确说明。
  • @Bob__:正确。重新打开问题,以便您可以发布更正确的答案。 (抱歉,没有费心挖掘散文并跳到“问题是......”,因此错过了上一段中的格式要求。)

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


【解决方案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';

作为对您的任务的建议,我会避免使用二维数组(以及一般的数组)。

创建一个类(或结构,也一样)来收集学生人数和平均数,然后将您读取的所有数据存储在这些结构的std::vector 中。

如果你还不知道我在说什么...定义 3 个数组来存储数字。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多