(C ++)1维战舰游戏有帮助吗?建议改进

时间:2015-11-10 05:31:51

标签: c++ arrays struct

不幸的是,周末没有教练帮助我完成这项任务,而且我被困住了。我正在学习C ++,而且我已经参加了编程的逻辑和设计课程,但就像我说我对C ++很新。我很难赶上其他学生。

我想是否有人可以列出改进,并且可能会澄清我是否与分配声明相比做错了。我非常感谢你的帮助!

我的代码是重复的,我确信我可以采用另一种方式显示数组值而不需要所有代码。使用应用程序后会弹出错误:

"运行时检查失败#2 - 围绕变量'敌人'已经腐败了。

如果存在此异常的处理程序,则可以安全地继续该程序。"

作业是:

"创建一个Battleship结构,其中包含5个一维整数坐标,表示其在某个区域(任意大小)内的位置。实例化结构的2个副本,并让用户为每个战舰输入单个坐标。设计您的代码以获取此单个坐标并使用它来填充每艘船的剩余4个坐标。对两个船舶结构都这样做。然后,让您的代码根据各自的坐标计算两艘船之间的数字距离。最后,使用英语句子向用户显示结果距离。"

我现在的代码是:

#include <iostream>
#include <string>

using namespace std;

struct Ship
{
    int x[5];
    int y[5];
};

int main()
{
    Ship good;
    Ship enemy;

    good.x[0] = 0;
    enemy.y[0] = 0;

    cout << "Enter a coordinate (out of 100) for good ship: "<< endl;
    cin >> good.x[0];

    good.x[1] = good.x[0] + 1;
    good.x[2] = good.x[1] + 1;
    good.x[3] = good.x[2] + 1;
    good.x[4] = good.x[3] + 1;

    cout << "Good ship coordinates:" << endl;
    cout << good.x[0]<< "*" << endl;
    cout << good.x[1]<< endl;
    cout << good.x[2]<< endl;
    cout << good.x[3]<< endl;
    cout << good.x[4]<< endl;

    cout << "Enter a coordinate (out of 100) for enemy ship: "<< endl;
    cin >> enemy.y[0];

    enemy.y[1] = enemy.y[0] + 1;
    enemy.y[2] = enemy.y[1] + 1;
    enemy.y[3] = enemy.y[2] + 1;
    enemy.y[4] = enemy.y[3] + 1;

    cout << "enemy ship coordinates:" << endl;
    cout << enemy.y[0]<< "*" << endl;
    cout << enemy.y[1]<< endl;
    cout << enemy.y[2]<< endl;
    cout << enemy.y[3]<< endl;
    cout << enemy.y[4]<< endl;

    int distance=0;
    distance = good.x[1] - enemy.y[1];

    cout << "The distance between good ship and enemy ship is: " << distance << endl; 

    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:5)

错误可能来自每个结构中只有4个坐标,而不是5.当您使用int x[4];声明数组时,它只有4个元素,即x[0]x[3]

还有许多其他问题:

  1. 两艘船不需要两个结构。只使用一个。这是结构/类的重点:表示对象类。仅使用一个结构(例如Ship命名),并声明您的船只goodenemy具有该类型。

  2. 不要害怕敌舰和有x坐标的好船。编译器和计算机不会混淆,你也不应该。

  3. 学习使用循环。即使您最初感到困惑,请记住,循环是程序员处理中最重要的工具之一(如果不是 最重要的)。想想如果你有100艘船只会有100个坐标会发生什么......

  4. 再次请记住,数组的第一个元素位于索引0,不是索引1 。 (最后一个元素是索引N-1。)

  5. 计算距离比你写的要复杂一点。两个物体之间的距离是否?如果敌舰的坐标大于友方船,会发生什么?一维距离的实际公式是什么?

  6. 删除未使用的代码。这个region变量的用途是什么?你有没有在任何地方使用它?

  7. 更新:(对于将来阅读的人,请记住,OP已更新并修改了他们的问题和代码,以至于我的某些观点不适用或将采用不同的方式。)< / p>

    1. 真的是否需要x中的yShip

答案 1 :(得分:0)

不确定使用系统(&#34; PAUSE&#34;)是否是教师讲授的内容,但这也是你可以改进的东西。 Explained here

答案 2 :(得分:0)

首先从

开始
  

创建一个Battleship结构,其中包含5个一维整数坐标,表示其在某个区域(任意大小)内的位置。实例化结构的2个副本,让用户为每个战舰输入单个坐标

您需要一个结构:

err

现在制作2份

struct Ship
{
    int x[5];
};

然后其余的看起来很好,它在我的计算机上编译并运行没有任何问题。您可以添加一个函数来填充船只以减少代码数量

int main()
{
    Ship good;
    Ship bad;
    ...

然后您还可以创建一个打印船舶位置的模拟函数