akiller_123 2014-10-12 02:13 采纳率: 0%
浏览 671

程序运行结果和预料的不一样

class Arry
{
private:
int row;
int col;
int *arrp;
public:
Arry(int x = 0, int y = 0);
~Arry();
int & operator()(int x=0, int y =0);
int getrow();
int getcol();
};

Arry::Arry(int x, int y)
{

if(x && y )
{
    this ->row = x;
    this ->col = y;
    arrp = new int[row * col];
    memset(arrp, 0, sizeof(int)*(row*col));
}

}

Arry::~Arry()
{
if(arrp)
{
delete []arrp;
arrp = NULL;
}
}

int & Arry::operator()(int x, int y)
{
if((x >= row || x < 0) && (y >= col || y < 0))
{
cout<<"erro "<<"ϱêÔ½½ç"<<endl;
}

return *(arrp + x*col + y);

}

int Arry::getrow()
{
return row;
}

int Arry::getcol()
{
return col;
}

void main()
{
int i=0;
int j=0;
Arry arr1(3,3);
for( i; i < arr1.getrow(); i++)
{
for(j; j < arr1.getcol(); j++)
{
cin >> arr1(i,j);

    }

}
for(i = 0; i < arr1.getrow(); i++)
{
    for(j = 0; j < arr1.getcol(); j++)
    {
        cout<<arr1(i, j)<<'\t';

    }
    cout<<endl;
}

}
输入:1 2 3 4 5 6 7 8 9
输出:1 2 3
0 0 0
0 0 0
但若把主函数改为:
void main()
{
int i;
int j;
Arry arr1(3,3);
for( i=0; i < arr1.getrow(); i++)
{
for(j=0; j < arr1.getcol(); j++)
{
cin >> arr1(i,j);

    }

}
for(i = 0; i < arr1.getrow(); i++)
{
    for(j = 0; j < arr1.getcol(); j++)
    {
        cout<<arr1(i, j)<<'\t';

    }
    cout<<endl;
}

}
输入:1 2 3 4 5 6 7 8 9
输出:1 2 3
4 5 6
7 8 9
请问各位这是为何?求指教

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-24 19:54
    关注

    该回答引用ChatGPT-3.5

    这是因为在第一个主函数中,i 和 j 在第一个嵌套循环中被初始化为0,然后在第二个嵌套循环中只是被使用,没有被重新初始化。因此,在第二个循环开始时,j 的值等于3,导致内层循环不会被执行,所以数组中的值没有被正确地赋值。


    在第二个主函数中,i 和 j 在第一个嵌套循环中被初始化,并在第二个循环中被正确地使用,因此数组中的值被正确地赋值和输出。建议使用第二个主函数中的方式来编写循环,以避免类似的错误。

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大