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

Đề tài: Hỏi về lỗi bài struct

  1. #1
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Mặc định Hỏi về lỗi bài struct

    Đề bài như sau:
    Nhập vào danh sách sinh viên gồm họ tên, năm sinh, điểm. Sắp xếp danh sách này theo thứ tự điểm giảm dần, nếu điểm bằng nhau thì sinh viên nào có năm sinh nhỏ hơn xếp trước. In danh sách đã sắp xếp với họ tên chữ HOA.

    Code này biên dịch bằng Turbo C++ 3.0 thì không bị lỗi gì, nhưng biên dịch bằng Visual Studio 2008 sau khi in ra kết quả thì lại bị lỗi (kết quả in ra đúng).

    Không biết có vấn đề gì ở khai báo con trỏ, cấp phát bộ nhớ động không. Mình mới tự học về mấy cái này cũng không vững lắm.

    C Code:
    1. #include <stdio.h>
    2. #include <malloc.h>
    3. #include <string.h>
    4.  
    5. typedef struct {
    6.     char Full_Name[25];
    7.     int Birth_Year;
    8.     int Mark;
    9. } student;
    10.  
    11. void Input(student *list, int N);
    12. void Output(student *list, int N);
    13. void per(student *std1, student *std2);
    14. void Arr(student *list, int N);
    15.  
    16. void main()
    17. {
    18.     int N;
    19.     student *list;
    20.  
    21.     printf("Enter the number of students: ");
    22.     scanf("%d%*c", &N);
    23.     list = (student *) malloc(sizeof(student));
    24.  
    25.     /* enter input data */
    26.     printf("\nEnter data of students:\n");
    27.     Input(list, N);
    28.  
    29.     /* sorting the list in descending order of marks */
    30.     Arr(list, N);
    31.  
    32.     /* print the list has been sorted with student's name in upper case */
    33.     printf("\nThe list has been sorted:\n");
    34.     Output(list, N);
    35. }
    36.  
    37. void Input(student *list, int N)
    38. {
    39.     int BY, M;
    40.     char FN[25];
    41.  
    42.     for (int i = 0; i < N; ++i) {
    43.         printf("\nStudent %d:\n", i);
    44.        
    45.         printf("Full Name: ");
    46.         gets(FN);
    47.         strcpy(list[i].Full_Name, FN);
    48.        
    49.         printf("Birth Year: ");
    50.         scanf("%d%*c", &BY);
    51.         list[i].Birth_Year = BY;
    52.        
    53.         printf("Mark: ");
    54.         scanf("%d%*c", &M);
    55.         list[i].Mark = M;
    56.     }
    57. }
    58.  
    59. void Output(student *list, int N)
    60. {
    61.     for (int i = 0; i < N; ++i) {
    62.         printf("\nStudent %d:\n", i);
    63.         printf("Full Name: %s\n", strupr(list[i].Full_Name));
    64.         printf("Birth Year: %d\n", list[i].Birth_Year);
    65.         printf("Mark: %d\n", list[i].Mark);
    66.     }
    67. }
    68.  
    69. void per(student *std1, student *std2)
    70. {
    71.     student std_temp = *std1;
    72.     *std1 = *std2;
    73.     *std2 = std_temp;
    74. }
    75.  
    76. void Arr(student *list, int N)
    77. {
    78.     student std_temp;
    79.    
    80.     for (int i = 0; i < N - 1; ++i)
    81.         for (int j = i + 1; j < N; ++j) {
    82.             if (list[j].Mark > list[i].Mark) {
    83.                 per(&list[j], &list[i]);
    84.             } else {
    85.                 if ((list[j].Mark == list[i].Mark && list[j].Birth_Year < list[i].Birth_Year))
    86.                     per(&list[j], &list[i]);
    87.             }
    88.         }
    89. }
    /* The thing that I think is the thing that I do. */

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Không biết VC 2008 thì thế nào chứ mình test thử bằng VC 2005 thì không thấy bị gì hết.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Nó bị như vầy nè, lúc chạy xong nó báo dừng chương trình: struct.exe has stopped working...

    /* The thing that I think is the thing that I do. */

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình chưa xài VC 2008 nên cũng không rõ. Nhưng mình nghĩ đó không phải là báo lỗi đâu.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    08 2008
    Bài viết
    22

    Tớ chưa test nhưng câụ có thể sưả ít nhâts là cái này:
    C++ Code:
    1. list = (student *) malloc(sizeof(student));
    thành
    C++ Code:
    1. list = (student *) calloc(n, sizeof(student));
    hoặc
    C++ Code:
    1. list = (student *) malloc(sizeof(student)*N);

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Mặc định Hỏi về lỗi bài struct

    vẫn build bằng vc đc, không hiểu bạn bị lỗi gì
    nhưng nếu có thể hãy thay thế bằng hàm fgets(). Hàm gets() không an toàn kiểu vì dễ bị overbuffer gây crash cho hệ thống

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Trích dẫn Nguyên bản được gửi bởi Berberin Xem bài viết
    Tớ chưa test nhưng câụ có thể sưả ít nhâts là cái này:
    C++ Code:
    1. list = (student *) malloc(sizeof(student));
    thành
    C++ Code:
    1. list = (student *) calloc(n, sizeof(student));
    hoặc
    C++ Code:
    1. list = (student *) malloc(sizeof(student)*N);
    Đúng rồi! Mình quên là phải cấp phát N vùng nhớ. Hix tại đem qua TC biên dịch không thấy lỗi nên cũng không để ý. Không ngờ bị sai cái lỗi ngớ ngẫn như vậy
    Cám ơn mọi người nha!
    /* The thing that I think is the thing that I do. */

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

  1. Gửi struct thông qua socket có khác nhau giữa gửi từng field và gửi cả struct?
    Gửi bởi bptvip_pro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 12-05-2013, 02:35 AM
  2. Bài tập C++ làm sao truy xuất biến của struct lồng trong struct
    Gửi bởi quangnam.tamky trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 10-04-2013, 05:22 PM
  3. Lập trình C++ Giúp đỡ về điểm khác nhau giữa struct và typedef struct
    Gửi bởi huydang2410 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 27-02-2013, 10:30 AM
  4. Khác nhau giữa struct trong c và struct trong c++
    Gửi bởi nhutlv01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 17-02-2012, 09:12 AM
  5. kiểu struct trên C++. CHo em hỏi rõ về kiểu struct???
    Gửi bởi nhonx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 13-01-2010, 08:39 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