01/10/2018, 10:24

Giúp tìm lỗi trong code mảng 2 chiều bị lặp vô hạn khi nhập mảng

#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
void nhapgiatri(int m[10][10]);
int main()
{
    int a[10][10],b[10][10],c[10][10];
    int row,col;
    cout<<"
 nhap gia tri hang & cot : ";
    cin>>row>>col;
    cout<<"
 nhap gia tri mang a : ";
    nhapgiatri(a);
    cout<<"
 nhap gia tri mang b : ";
    nhapgiatri(b);
    for(int i=0;i<row;++i)
    {
        for(int j=0;j<col;++j)
        {
            *(*(c+i)+j) = *(*(a+i)+j) + *(*(b+i)+j);
        }
    }
    cout<<"
 tong cua 2 mang da cho la : ";
    for(int k=0;k<row;++k)
    {
        for(int l=0;l<col;++l)
        {
            cout<<*(*(c+k)+l)<<"   ";
        }
    }

    getch();
}
void nhapgiatri(int m[10][10])
{
    int row,col;
    for(int i=0;i<row;++i)
    {
        for(int j=0;j<col;++j)
        {
            cin>>m[i][j];
        }
    }
}

Henry viết 12:37 ngày 01/10/2018

row, col ở hàm nhapgiatri là nó khác so với row, col ở hàm main. Bạn thử vào hàm nhapgiatri in thử 2 biến đó ra xem bao nhiêu. lúc nó bạn sẽ tự biết phải làm gì tiếp theo

Hưng Nguyễn viết 12:31 ngày 01/10/2018

e sửa đc r ạ ? e cám ơn ạ

HK boy viết 12:31 ngày 01/10/2018

Kích thước của mảng 2 chiều của bạn phải là biến toàn cục, bởi kích thược row, col bạn nhập vào đóng vai trò quan trọng trong tất cả các chương trình ở sau.

void nhapgiatri(int m[10][10])
{
int row,col;

Ở đây bạn đã khai báo row, col là biến cục bộ của void nhapgiatri. Biến row, col này không liên quan đến biến row, col bạn khai báo trong hàm main. Có 2 cách sửa:

  • Đưa biến row, col trong hàm main ra ngoài. Lúc này 2 biến này là biến toàn cục. Bỏ biến row, col trong void nhapgiatri đi.
  • Vẫn giữ biến row, col trong hàm main, tuy nhiên void nhapgiatri đưa thêm 2 tham trị là rowcol, tức là
void nhapgiatri(m[][], row, col)

Góp ý: Bạn code C++, mình cũng mong bạn không code kiểu này nữa

*(*(a+i)+j)

Trông khổ sở kiểu gì ấy, mà trông không được sáng sủa. Khổ nhất là lúc debug.

Hưng Nguyễn viết 12:29 ngày 01/10/2018

vì e thấy trong giáo trình họ nói khi dùng con trỏ việc truy xuất bộ nhớ nhanh hơn khi dùng chỉ số mảng …nên e mới dùng chứ nhìn n cũng tù lắm ạ …

Trần Hoàn viết 12:37 ngày 01/10/2018

Biết là nó nhanh hơn, nhưng việc chưa nắm vững cơ bản thì bạn cần cải thiện trước đã. Cái gì cũng có 2 mặt, khi nào cầm dao chắc thì mới tập múa dao nhé.

rogp10 viết 12:38 ngày 01/10/2018

Không nhanh hơn mấy đâu, nếu là primitive. Vả lại dùng con trỏ thì bạn có thể làm được những trick như shallow copy, dancing link, giảm mem trong QHĐ hay xử lí chuỗi chứ viết kiểu ersatz ntn thì ko phải là ứng dụng của nó.

Bài liên quan
0