Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: hàm in bị lỗi, mọi người sửa giúp!

  1. #1
    Ngày gia nhập
    09 2012
    Bài viết
    1

    Mặc định hàm in bị lỗi, mọi người sửa giúp!

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4. void hamnhap(int *a, int n)
    5. {
    6.      int i;
    7.  printf("\nDia chi dau tien duoc truyen vao la: a= %p\n",a);
    8.  a=(int *)malloc(n*sizeof (int));
    9.  for(i=0;i<n;i++)
    10.  scanf("\n%d",&a[i]);  
    11. }
    12.  
    13. void hamin(int a[],int n)
    14. {
    15.      int i;
    16.  for(i=0;i<n;i++)
    17.  printf("\n a[%d]=%d",i,a[i]);    
    18. }
    19. main()
    20. {
    21.   int a[50];
    22.   int i,n=3;
    23.       printf("\nPhan tu dau tien cua mang a co dia chi la: a[0]= %p\n",a );
    24.       hamnhap(a,n);
    25.       printf("\nHien thi cac gia tri vua nhap: ");
    26.       printf("\nPhan tu dau tien cua mang a sau khi thoat ham co dia chi la: a[0]= %p",a );
    27.       hamin(a,n);
    28.        
    29.      
    30. getch();      
    31. }
    Mình không thấy lỗi gì ở hàm in mà in không được, mọi người giúp tôi với.
    Đã được chỉnh sửa lần cuối bởi aydada : 03-12-2012 lúc 03:17 PM. Lý do: cho code vào tag

  2. #2
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Bạn cho code vào tag cho đúng tiêu chuẩn post bài đi. http://diendan.congdongcviet.com/showthread.php?t=6131
    không hiểu là khai báo mảng tĩnh a[50] rồi bạn lại cấp phát động a=(int *)malloc(n*sizeof (int)); để làm gì nữa đây. Bỏ cấp phát động đi. Khi cấp phát động thì con trỏ a không con chứa địa chỉ đầu tiên của mảng nữa, mà sẽ chứa địa chỉ ô nhớ đầu tiên của vùng nhớ được cấp phát động, do vậy lúc này nhập dữ liệu cho vùng nhớ vừa được cấp phát chứ không còn cho a[50], in ra toàn số linh tinh ramdom rồi.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  3. #3
    Ngày gia nhập
    09 2012
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    Bạn cho code vào tag cho đúng tiêu chuẩn post bài đi. http://diendan.congdongcviet.com/showthread.php?t=6131
    không hiểu là khai báo mảng tĩnh a[50] rồi bạn lại cấp phát động a=(int *)malloc(n*sizeof (int)); để làm gì nữa đây. Bỏ cấp phát động đi. Khi cấp phát động thì con trỏ a không con chứa địa chỉ đầu tiên của mảng nữa, mà sẽ chứa địa chỉ ô nhớ đầu tiên của vùng nhớ được cấp phát động, do vậy lúc này nhập dữ liệu cho vùng nhớ vừa được cấp phát chứ không còn cho a[50], in ra toàn số linh tinh ramdom rồi.
    Cảm ơn bạn, vì mình không chắc kiến thức...

  4. #4
    Ngày gia nhập
    09 2012
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    Bạn cho code vào tag cho đúng tiêu chuẩn post bài đi. http://diendan.congdongcviet.com/showthread.php?t=6131
    không hiểu là khai báo mảng tĩnh a[50] rồi bạn lại cấp phát động a=(int *)malloc(n*sizeof (int)); để làm gì nữa đây. Bỏ cấp phát động đi. Khi cấp phát động thì con trỏ a không con chứa địa chỉ đầu tiên của mảng nữa, mà sẽ chứa địa chỉ ô nhớ đầu tiên của vùng nhớ được cấp phát động, do vậy lúc này nhập dữ liệu cho vùng nhớ vừa được cấp phát chứ không còn cho a[50], in ra toàn số linh tinh ramdom rồi.
    Vì mình nghĩ khi khái báo con trỏ, ta phải cấp phát cho nó 1 bộ nhớ. Chứ 1 con trỏ thì nó chỉ chứa được 1 giá trị, trong khi mình muốn nhập một mảng. Vậy Khi truyền tham số thực địa chỉ cho hàm khai báo con trỏ mà lại sử dụng cái mảng không được khai báo trong hàm như thế này.
    Code:
    for(i=0;i<n;i++)
     scanf("\n%d",&a[i]);
    Vẫn đúng, nhưng không logic lắm nhỉ.
    Bạn giải thích giúp mình cái..

  5. #5
    Ngày gia nhập
    09 2012
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    Bạn cho code vào tag cho đúng tiêu chuẩn post bài đi. http://diendan.congdongcviet.com/showthread.php?t=6131
    không hiểu là khai báo mảng tĩnh a[50] rồi bạn lại cấp phát động a=(int *)malloc(n*sizeof (int)); để làm gì nữa đây. Bỏ cấp phát động đi. Khi cấp phát động thì con trỏ a không con chứa địa chỉ đầu tiên của mảng nữa, mà sẽ chứa địa chỉ ô nhớ đầu tiên của vùng nhớ được cấp phát động, do vậy lúc này nhập dữ liệu cho vùng nhớ vừa được cấp phát chứ không còn cho a[50], in ra toàn số linh tinh ramdom rồi.
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    void hamnhap(int *a, int n)
    {
    int i;
    printf("\nDia chi dau tien duoc truyen vao la: a= %p\n",a);
    for(i=0;i<n;i++)
    scanf("\n%d",&a[i]);  //m?ng không duoc khai báo này.
    }
    
    void hamin(int a[],int n)
    {
    int i;
    for(i=0;i<n;i++)
    printf("\n a[%d]=%d",i,a[i]); 
    }
    main()
    {
    int a[50];
    int i,n=3;
    printf("\nPhan tu dau tien cua mang a co dia chi la: a[0]= %p\n",a );
    hamnhap(a,n);
    printf("\nHien thi cac gia tri vua nhap: ");
    printf("\nPhan tu dau tien cua mang a sau khi thoat ham co dia chi la: a[0]= %p",a );
    hamin(a,n);
    
    
    getch(); 
    }
    Xem đoạn code này tháy phần khai báo linh tinh nhỉ

  6. #6
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Mặc định hàm in bị lỗi, mọi người sửa giúp!

    Không hiểu ý bạn là gì nhưng đọc bài này trước khi hỏi tiếp và bạn xem lại kiến thức phần hàm đi
    http://diendan.congdongcviet.com/showthread.php?t=42977
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

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

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 AM

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