Cry*_*l W -2 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;
}
Run Code Online (Sandbox Code Playgroud)
错误可能来自每个结构中只有4个坐标,而不是5.当你用数组声明一个数组时int x[4];,它只有4个元素,即x[0]to x[3].
还有许多其他问题:
两艘船不需要两个结构.只使用一个.这是结构/类的重点:表示对象类.仅使用一个结构(例如命名Ship)并声明您的船只good并enemy具有该类型.
不要害怕敌舰和有x坐标的好船.编译器和计算机不会混淆,你也不应该.
学习使用循环.即使你在第一个困惑,请记住,循环是一个最(如果不是在大多数)在程序员处置的重要工具.想想如果你有100艘船只会有100个坐标会发生什么......
再次记住,数组的第一个元素是索引0,而不是索引1.(最后一个元素是索引N-1.)
计算距离比你写的要复杂一点.两个物体之间的距离是否可以为负?如果敌舰的坐标大于友方船,会发生什么?一维距离的实际公式是什么?
删除未使用的代码 这个region变量有什么用?你在任何地方都用过吗?
更新:(对于将来阅读的人,请记住,OP已更新并修改了他们的问题和代码,以至于我的某些观点不适用或将采用不同的方式.)
xs和ys Ship吗?