Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 30 kết quả

Đề tài: [C] Bài đơn giản, Tìm ko ra lỗi !

  1. #1
    No Avatar
    newbie_newbie Khách

    Mặc định [C] Bài đơn giản, Tìm ko ra lỗi !

    Các bạn xem giùm mình bài này sao lúc dịch thì ko có lỗi, nhưng khi chạy thì ra rác ? Mình tìm mãi mà ko biết lỗi chỗ nào !
    Cám ơn nhiều lắm !
    Code:
    void main()
    {
        int n,m,i,j;
    	int a[M][N];
        printf("Nhap so hang : ");
        scanf("%d", &m);
        printf("Nhap so cot : ");
        scanf("%d", &n);
    
        for (i=0; i<m; i++)       //*******Nhap
    	{
            for(j=0; j<n; j++)
            {
                printf("Nhap a[%d][%d] : ",i,j);
                scanf("%d", (a+i*n+j) );
            }
    	}
         for(i=0; i<m; i++)		//*********Xuat
        {
            for(j=0; j<n; j++)
    		{
    			printf("a[%d][%d] : %d\t",i,j, a[i][j]);
    		}
    		printf("\n");
    	}
    }

  2. #2
    No Avatar
    Nhuan_Trang_Only_Love Khách

    Trích dẫn Nguyên bản được gửi bởi newbie_newbie Xem bài viết
    Code:
        int n,m,i,j;
        for (i=0; i<m; i++)       //*******Nhap
    	{
            for(j=0; j<n; j++)
            {
                printf("Nhap a[%d][%d] : ",i,j);
                scanf("%d", (a+i*n+j) );
            }
    	}
    oh, chỗ nhập này lạ quá hà , tôi chưa thấy bao giờ bạn giải thích giùm được không???
    scanf("%d", (a+i*n+j) );
    Theo tôi thì mảng hai chiều thì bạn nên chú ý không sẽ quá dung lượng đó
    vì nó sẽ có tới M*N phần tử đấy.tôi đã gặp trường hợp này rùi đó
    Vậy thôi tôi nghĩ là như vậy, bạn test lại xem
    Có gì send cho tôi

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Bạn sai do vài lý do sau:
    1. Bạn tính nhầm chỗ nhập phần tử cho mảng.
    2. Phép lấy địa chỉ ở mảng 2 chiều khác với mảng một chiều do đó cú pháp của bạn là không chính xác. Nếu làm như bạn sẽ dẫn đến overloading stack.

    Bạn thử làm như sau: (Dreaminess nghĩ rằng nó sẽ thoáng và dễ hiểu hơn)

    Code:
    int *pa;
    pa=(int*)a;
    
    for(i=0;i<=M*N-1;i++)
      scanf("%i",pa+i);
    Chúc may mắn. Hi vọng bạn sẽ học tốt hơn và trao đổi nhiều hơn với mọi người. OK?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Sao chưa thấy Newbie (thì tớ cũng vậy thôi ) lên gì hết vậy cà , hi vọng rằng tớ spam cái ni vào không muộn , tại tớ có í thế này :

    Nếu N chưa giải ra bài í mà Dreaminess lại giúp bằng cách đưa code có con trỏ vào thì có lẽ N cũng chưa hiểu rõ đâu . Nhưng nếu kid làm thế này có lẽ cũng được nè :
    printf("Nhap a[%d][%d] : ",i,j);
    scanf("%d", temp );
    a[i][j]=temp;
    P/s :Thực ra thì trong mảng 2 chiều phép lấy địa chỉ kiểu scanf("%d", &a[i][j]) vẫn được chấp nhận mà . Có điều lưu vào 1 biến tạm thì ổn hơn

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Trích dẫn Nguyên bản được gửi bởi Nhuan_Trang_Only_Love Xem bài viết
    oh, chỗ nhập này lạ quá hà , tôi chưa thấy bao giờ bạn giải thích giùm được không???oh, chỗ nhập này lạ quá hà , tôi chưa thấy bao giờ bạn giải thích giùm được không???
    scanf("%d", (a+i*n+j) );
    Có lẽ là bạn í ghi lộn , phải chăng là thế này scanf("%d",a[i*n+j]);

  6. #6
    No Avatar
    newbie_newbie Khách

    Mặc định [C] Bài đơn giản, Tìm ko ra lỗi !

    Cám ơn sự trợ giúp của các bạn !
    Khi mình thêm 2 dòng này thì đoạn code chạy tốt ! Nhưng mình vẫn không hiểu là tại sao phải cần có con trỏ pa, không dùng trực tiếp dc mảng a à ?
    Code:
    	int *pa;
    	pa = (int*)a;
    Code:
    	int *pa;
    	pa = (int*)a;
        for (i=0; i<m; i++)       //*******Nhap
    	{
            for(j=0; j<n; j++)
            {
                printf("Nhap a[%d][%d] : ",i,j);
                scanf("%d", (pa+i*n+j) );
            }
    	}
    To Nhuan_Trang_Only_Love : (a+i*n+j) = &a[i][j] đó bạn ! ok ?

  7. #7
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi newbie_newbie Xem bài viết
    Cám ơn sự trợ giúp của các bạn !
    Khi mình thêm 2 dòng này thì đoạn code chạy tốt ! Nhưng mình vẫn không hiểu là tại sao phải cần có con trỏ pa, không dùng trực tiếp dc mảng a à ?
    Code:
    	int *pa;
    	pa = (int*)a;
    Code:
    	int *pa;
    	pa = (int*)a;
        for (i=0; i<m; i++)       //*******Nhap
    	{
            for(j=0; j<n; j++)
            {
                printf("Nhap a[%d][%d] : ",i,j);
                scanf("%d", (pa+i*n+j) );
            }
    	}
    To Nhuan_Trang_Only_Love : (a+i*n+j) = &a[i][j] đó bạn ! ok ?
    Thật ra, bạn không thể áp dụng phép tính "+" đối với mảng như bạn đã làm lúc đầu được, nếu bạn muốn nhập liệu cho mảng thì nên dùng chỉ mục. Còn nếu bạn dùng con trỏ, bạn được quyền dùng phép tính "+" như bạn dreaminess đã làm.

  8. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    à hiểu rồi mặc dù chưa sâu lắm .

  9. #9
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Pete nhớ hình như là Standard C/C++ 99 kô cho phép lấy giá trị trực tiếp trên mảng nhiều chiều : &a[i][j] là kô hợp lệ.
    Phương pháp xử lý là dùng con trỏ để point đến vị trí xác định trong mảng nhiều chiều theo như các bạn đã viết ở trên.

    Mặc dù các pack of editor & compiler như : Dev-C++ hay VC++ cho phép bạn làm trực tiếp nhưng nhiều lúc dễ bị crash nên không tốt lắm.
    None!

  10. #10
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Pete đọc toàn sách tiếng anh không ? nên pete nói ra cái gì ? kid mù cái đó , nhưng trong borland C và visual C thì có thể sử dụng &a[i][j] , còn mảng 3 chiều trở lên thì không thể sử dụng kiểu vậy được , theo kid nghĩ thì lưu vào một biến tạm cũng được ,không nhất thiết phải sử dụng con trỏ .

Các đề tài tương tự

  1. Cung cấp giấy ik plus, Paper One, Plus A+, Double A, Giấy Thái Lan, Giấy Bãi Bằng, bìa màu, băng dính, mica các loại
    Gửi bởi dungptvietthanh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-06-2013, 04:05 PM
  2. Chung cư Đại Thanh giảm sốc 10tr/vnđ cho các căn hộ. giảm và liên tục giảm…!!
    Gửi bởi lanthanh91 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 09-10-2012, 10:27 AM
  3. Trả lời: 0
    Bài viết cuối: 06-08-2012, 07:01 PM
  4. Trả lời: 0
    Bài viết cuối: 04-08-2012, 03:08 PM
  5. Trả lời: 0
    Bài viết cuối: 24-05-2012, 04:04 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn