有人可以告诉我如何修复错误吗?如果我将数组更改为c ++ 11的vector也会更好吗?我会获得任何优势吗?也有人可以告诉我是否有任何方法可以改进我的代码?
#include <iostream>
#include <fstream>
//#define long long 100000000;
//#define int 1000;
using namespace std;
void ts1(int *zone);
void ts2();
void ts3();
int p,n,m;
struct lazer{
int x;
int y;
int direction;
};
//int z[4]={1,1,1,1}
int main()
{
// int p,n;
// long z;
std::ifstream file;
file.open("input.txt");
file >> p;
file >>n>>m;
lazer Bem[m];
// long * sir = new long[2*n];
// long sir[2*n] ;
int *zone[n][n];
for (int i=0;i< n;i++)
for (int j=0;j< n;j++)
file>>zone[i][j];
//file >> sir[i];
for (int k=0;k<m;k++){
file >> Bem[k].x;
file >> Bem[k].y;
file >> Bem[k].direction;
}
file.close();
for(int z1=0;z1<m;z1++){
switch(Bem[z1].direction){
case 1:
for(int zt=n-Bem[z1].x;zt<n;z1++)
{
zone[zt][Bem[z1].y]=zone[zt][Bem[z1].y] -1;
}
}
}
if (p==1)ts1(zone);
else ts2();
// else ts3();
// delete [] sir;
return 0;
}
void ts1(int *zone){
int gropi=0;
static int* mutari[8][2]={{-1,0}, {-1, -1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}};//{{-1,0},{0,1},{1,0},{0,-1}}
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int z=0;z<8;z++){
int ni=i+mutari[z][0];
int nj=j+mutari[z][1];
if(zone[i][j] <= zone[ni][nj])gropi++;
}
}
}
}
void ts2(){
cout << "d";
}
void ts3(){
cout << "d";
}
错误:
void ts1(int **zone){
int gropi=0;
static int mutari[8][2]={{-1,0}, {-1, -1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}};//{{-1,0},{0,1},{1,0},{0,-1}}
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int z=0;z<8;z++){
int ni=i+mutari[z][0];
int nj=j+mutari[z][1];
if(zone[i][j] <= zone[ni][nj])gropi++;
}
}
}
cout <<gropi;
}
在此部分cout <<gropi;
将使exe停止。为什么?
答案 0 :(得分:1)
我没有通过你的完整代码,但我查看了main()
方法。
我发现很少有问题;
lazer Bem[m];
你不能像这样声明数组,因为它在编译时需要精确的大小。你需要使用指针动态分配内存。
我在main()
方法中做了一些修改;
//int z[4]={1,1,1,1}
int main()
{
// int p,n;
// long z;
std::ifstream file("input.txt");
file >> p;
file >>n>>m;
lazer* Bem = new lazer[m];
int **zone = new int*[n];
for (int i=0;i< n;i++)
{
zone[i] = new int[n];
for (int j=0;j< n;j++)
{
file>>zone[i][j];
}
}
//file >> sir[i];
for (int k=0;k<m;k++){
file >> Bem[k].x;
file >> Bem[k].y;
file >> Bem[k].direction;
}
file.close();
for(int z1=0;z1<m;z1++){
switch(Bem[z1].direction){
case 1:
for(int zt=n-Bem[z1].x;zt<n;z1++)
{
zone[zt][Bem[z1].y]=zone[zt][Bem[z1].y] -1;
}
}
}
if (p==1)ts1(zone);
else ts2();
// else ts3();
// delete [] sir;
return 0;
}
您可以类似地修改其他方法。
希望它有所帮助。