【问题标题】:Program Practice Exercise On Streams C++Streams C++程序实践练习
【发布时间】:2020-05-14 12:23:20
【问题描述】:

所以当我想用纯文本制作视频游戏但我遇到问题时,我正在练习使用流未来。我正在使用的这本电子书希望我编写一个程序来读取包含浮点数字。打印文件中数字的平均值。提示用户输入文件名。

这是我目前的工作:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ofstream Practice_Text;

    double Numbers[5] = { 3.4, 5.6, 7.8, 9.3, 2.1 };

    Practice_Text.open("./Point_Numbers");

    Practice_Text << Numbers;

    Practice_Text.close();

    double practice_mode[5];

    double avg_number;

    double First_Num;

    ifstream Open_Text;

    Open_Text.open("./Point_Numbers");

    Open_Text >> First_Num[1];

    cout << First_Num[1];

    Open_Text.close();

    return 0;
}

现在请原谅使用命名空间,因为我知道不建议这样做,但我想在这里专注于使用流。我使用了一个包含五个元素的数组并将其命名为 Numbers。然后我把它放在文件中,关闭它,然后重新打开它,希望能打印出每个数字的平均值。

现在我知道我正在做的不是打印出所有数字然后打印出平均值的方法,而是我试图做的是取出第一个数字并打印出来,至少知道我在正确的轨道上,但我一直在零,我在这里做错了什么?我知道我可以用指针来做,但我宁愿用我在这里的东西来做。

【问题讨论】:

  • First_Num[1] 应该是什么?
  • "Practice_Text&lt;&lt;Numbers" ——这并不像你认为的那样。您是否真的检查过写入文件的内容?此外,没有自尊的 C++ 编译器会编译您的“Open_Text&gt;&gt;First_Num[1];”而不抱怨并产生致命错误消息。请展示你的真实程序。

标签: c++ arrays file stream


【解决方案1】:

我修复了你的编译器错误:

  • 您不能直接将数组写入文件。数组衰减到指向第一个元素的指针
  • 您可以使用 fstream 构造函数打开文件
  • fstream 析构函数也可以关闭您的文件。
  • First_Num 是双精度数,而不是数组。不能下标
  • 我删除了未使用的变量
  • 我添加了文件是否正确打开的检查
  • 我删除了using namespace std;。这很危险,尤其是对于初学者。许多初学者不知道该名称空间中已经使用了名称。他们为变量或函数使用相同的名称,并得到一个行为奇怪的程序。

代码:

#include <iostream>
#include <fstream>
using std::cout;
using std::ifstream;
using std::ofstream;

int main()
{
    double Numbers[5] = { 3.4, 5.6, 7.8, 9.3, 2.1 };

    {
        ofstream Practice_Text("./Point_Numbers");
        if (!Practice_Text) return EXIT_FAILURE;
        for (const auto &Number: Number) {
            Practice_Text << Number;
        }
    }

    double First_Num;

    {
        ifstream Open_Text("./Point_Numbers");
        if (!Open_Text) return EXIT_FAILURE;
        Open_Text >> First_Num;
    }

    cout << First_Num;

    return EXIT_SUCCESS;
}

【讨论】:

  • 感谢您帮助我,但您认为您可以逐步详细说明您所做的事情吗?你能解释一下:if (!Practice_Text) return EXIT_FAILURE; for (const auto &Number: Number) ?
  • if (!Practice_Text) return EXIT_FAILURE; 检查文件是否正确打开,如果失败则以错误代码结束程序。 for (const auto &amp;Number: Number)range-based for loop
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多