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

Đề tài: Quản lý sinh viên bằng danh sách liên kết đơn, lỗi không in được kết quả ra màn hình!

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

    Mặc định Quản lý sinh viên bằng danh sách liên kết đơn, lỗi không in được kết quả ra màn hình!

    Em co bai nay ko hieu sao lai ko in ra dc man hinh ,cac xem ho em cai
    C Code:
    1. /* quan li sinh vien bang danh sach lien ket */
    2. #include <stdio.h>
    3. #include <conio.h>
    4. #include <alloc.h>
    5. #include <string.h>
    6.  
    7. typedef struct
    8.   {
    9.   char ten[20];
    10.   char masv[20];
    11.   int tuoi;
    12.   }sinhvien;
    13. typedef struct sv
    14.    {
    15.    sinhvien info;
    16.    struct sv *next;
    17.    }DS;
    18.  DS *first=NULL;
    19. /* Viet luon cac ham */
    20. DS *Insert_head(DS *first,sinhvien  x)
    21.   {
    22.   DS *temp;
    23.   temp=(DS *)malloc(sizeof(DS));
    24.   temp->info=x;
    25.   temp=first;
    26.   first=temp;
    27.   return first;
    28.   }
    29. DS *Insert_last(DS *first,sinhvien x )
    30.    {
    31.    DS *newnode;
    32.    DS *temp;
    33.    newnode= (DS *)malloc(sizeof(DS));
    34.    newnode->info=x;
    35.    temp=first;
    36.    while(temp!=NULL)
    37.      {
    38.      temp=temp->next;
    39.      }
    40.    temp->next=newnode;
    41.    return first;
    42.  
    43.     }
    44. void khoitao(DS *first)
    45.   {
    46.   first=NULL;
    47.   }
    48. void print(DS *first)
    49.   {
    50.   DS *temp;
    51.   temp=first;
    52.   while(temp!=NULL)
    53.     {
    54.     printf("\n Ten : %s ",temp->info.ten);
    55.     printf("\n Tuoi : %d",temp->info.tuoi);
    56.     printf("\n Masv : %s ",temp->info.masv);
    57.     temp=temp->next;
    58.     }
    59.     getch();
    60.   }
    61. void menu(DS *first)
    62.   {
    63.   sinhvien x,y;
    64.   char c;
    65.   khoitao(first);
    66.   do
    67.   {
    68.   clrscr();
    69.   printf("\n 1.Them vao dau danh sach ");
    70.   printf("\n 2.Them vao cuoi danh sach :");
    71.   printf("\n 3.In ra man hinh :");
    72.   printf("\n 0.THoat ");
    73.   printf("\n");
    74.   printf("\n Nhap vao lua chon : ");
    75.   c=getch();
    76.   switch(c)
    77.    {
    78.    case '1' :
    79.        fflush(stdin);
    80.        printf("\n Nhap vao ten: ");
    81.        gets(x.ten);
    82.        printf("\n Nhap vao ma sinh vien ");
    83.        gets(x.masv);
    84.        printf("\n Nhap vao tuoi :");
    85.        scanf("%d",&x.tuoi);
    86.  
    87.        Insert_head(first,x);
    88.        break;
    89.    case '2' :
    90.        fflush(stdin);
    91.        printf("\n Nhap vao ten : ");
    92.        gets(y.ten);
    93.        printf("\n Nhap vao tuoi ");
    94.        scanf("%d",&y.tuoi);
    95.        printf("\n Nhap vao ma sinh vien ");
    96.        gets(y.masv);
    97.        Insert_last(first,y);
    98.        break;
    99.    case '3' : printf(first);
    100.         break;
    101.    case '0': exit(1);
    102.         break;
    103.    default : printf("\n ban da nhap sai phim chuc nang ");
    104.         break;
    105.       }
    106.       }
    107.   while(c!='0');
    108.    }
    109.  
    110. void main()
    111.   {
    112.   DS *first=NULL;
    113.   menu(first);
    114.   }

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

    C Code:
    1. /* quan li sinh vien bang danh sach lien ket */
    2. #include <stdio.h>
    3. #include <conio.h>
    4. #include <alloc.h>
    5. #include <string.h>
    6.  
    7. typedef struct
    8.   {
    9.   char ten[20];
    10.   char masv[20];
    11.   int tuoi;
    12.   }sinhvien;
    13. typedef struct sv
    14.    {
    15.    sinhvien info;
    16.    struct sv *next;
    17.    }DS;
    18. /* Viet luon cac ham */
    19. void Insert_head(DS *first,sinhvien  x)
    20.   {
    21.   DS *temp;
    22.   temp=(DS *)malloc(sizeof(DS));
    23.   temp->info=x;
    24.   temp->=first;
    25.   first=temp;
    26.   }
    27. void Insert_last(DS *first,sinhvien x )
    28.    {
    29.    DS *newnode;
    30.    DS *temp;
    31.    newnode= (DS *)malloc(sizeof(DS));
    32.    newnode->info=x;
    33.    newnode->next=NULL;
    34.    temp=first;
    35.    if(temp!=NULL)
    36.    {
    37.     while(temp->next!=NULL)
    38.       {
    39.          temp=temp->next;
    40.       }
    41.     temp->next=newnode;
    42.     }
    43.     else
    44.       first=newnode;
    45.     }
    46. void khoitao(DS *first)
    47.   {
    48.       first=NULL;
    49.   }
    50. void print(DS *first)
    51.   {
    52.   DS *temp;
    53.   temp=first;
    54.   if(temp==NULL)
    55.     printf("\n danh sach rong");
    56.   else
    57.     while(temp!=NULL)
    58.       {
    59.         printf("\n Ten : %s ",temp->info.ten);
    60.         printf("\n Tuoi : %d",temp->info.tuoi);
    61.         printf("\n Masv : %s ",temp->info.masv);
    62.         temp=temp->next;
    63.       }
    64.     getch();
    65.   }
    66. void menu(DS *first)
    67.   {
    68.   sinhvien x,y;
    69.   char c;
    70.   khoitao(first);
    71.   do
    72.   {
    73.   clrscr();
    74.   printf("\n 1.Them vao dau danh sach ");
    75.   printf("\n 2.Them vao cuoi danh sach :");
    76.   printf("\n 3.In ra man hinh :");
    77.   printf("\n 0.THoat ");
    78.   printf("\n");
    79.   printf("\n Nhap vao lua chon : ");
    80.   c=getch();
    81.   switch(c)
    82.    {
    83.    case '1' :
    84.        fflush(stdin);
    85.        printf("\n Nhap vao ten: ");
    86.        gets(x.ten);
    87.        printf("\n Nhap vao ma sinh vien ");
    88.        gets(x.masv);
    89.        printf("\n Nhap vao tuoi :");
    90.        scanf("%d",&x.tuoi);
    91.        Insert_head(first,x);
    92.        break;
    93.    case '2' :
    94.        fflush(stdin);
    95.        printf("\n Nhap vao ten : ");
    96.        gets(y.ten);
    97.        printf("\n Nhap vao tuoi ");
    98.        scanf("%d",&y.tuoi);
    99.        printf("\n Nhap vao ma sinh vien ");
    100.        gets(y.masv);
    101.        Insert_last(first,y);
    102.        break;
    103.    case '3' : printf(first);
    104.         break;
    105.    case '0': exit(1);
    106.         break;
    107.    default : printf("\n ban da nhap sai phim chuc nang ");
    108.         break;
    109.       }
    110.       }
    111.   while(c!='0');
    112.    }
    113.  
    114. void main()
    115.   {
    116.       DS *first
    117.       menu(first);
    118.   }
    mình sữa lại thế bạn xem có được không .Nếu không post cái sai lên.
    Luôn muốn hỏi

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bài của bạn khá nhiều vấn đề, bạn chưa hiểu rõ lắm về danh sách, bạn nên search diễn đàn để xem các bài hướng dẫn, trên diễn đàn có sẵn và khá đầy đủ.

    Code dưới đây chỉ ra cho bạn vài lỗi, bạn hãy xem qua và sửa lại.
    C Code:
    1. /* quan li sinh vien bang danh sach lien ket */
    2. #include <stdio.h>
    3. #include <conio.h>
    4. #include <alloc.h>
    5. #include <stdlib.h>
    6. #include <string.h>
    7.  
    8. typedef struct
    9. {
    10.     char ten[20];
    11.     char masv[20];
    12.     int tuoi;
    13. }sinhvien;
    14.  
    15. typedef struct sv
    16. {
    17.     sinhvien info;
    18.     struct sv *next;
    19. }*DS;
    20.  
    21. DS first=NULL;
    22.  
    23. /* Viet luon cac ham */    
    24.  
    25.  // can ham khoi tao, ham huy va ham kiem tra rong o day
    26.  
    27. DS Insert_head(DS first,sinhvien  x) //ham add sao lai tra ve DS
    28.   {
    29.   DS temp;
    30.   temp=(DS)malloc(sizeof(sv));
    31.   temp->info=x;
    32.   //TH dslk trong thi sao
    33.   temp->next=first;           ////
    34.   first=temp;
    35.   return first;
    36.   }
    37.  
    38. DS *Insert_last(DS first,sinhvien x ) // cai nay nua
    39.    {
    40.    DS newnode;
    41.    DS temp;
    42.    newnode= (DS)malloc(sizeof(sv));
    43.    newnode->info=x;
    44.    temp=first;
    45.    while(temp->next!=NULL)
    46.      {
    47.      temp=temp->next;
    48.      }
    49.    temp->next=newnode;
    50.    newnode->next=NULL
    51.    return first;
    52.  
    53.     }

    @Edit: bài của cuibap sửa hầu hết các lỗi rồi, nhưng không có nghĩa là nó đã chính xác và chuẩn.

  4. #4
    Ngày gia nhập
    11 2008
    Bài viết
    3

    Bác QuangHoang ơi .Bác xem cho em cái bài kia đi ,em không thể in ra màn hình các thông tin mà em nhập đc ,ko bit vì sao nữa Nếu có thể bác có thể chỉ ra cho em xem em sai or thiếu cại đc ko .Thaks bác nhìu

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

    sao hàm void main của bạn đơn giản thế ! Mình nghĩ bạn thiếu khai báo 2 hàm này void print(DS *first) và hàm nhập. Như thế sẽ ko nhập và xuất thông tin được. Hi vọng là đúng vì khi mình chạy thử chương trình của bạn thì VS6 của mình treo lun. Hì
    Tôi phải học những gì tôi chưa biết
    Tôi phải biết những gì tôi đã học


    Hãy Yêu Virus vì Virus rất yêu bạn

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

    Mặc định Quản lý sinh viên bằng danh sách liên kết đơn, lỗi không in được kết quả ra màn hình!

    Không phải bác ạ ,theo em thì hàm menu(DS *first) đã bao hết các hàm khác rùi ,khi thực hiện nó tức là sẽ thực hiện các hàm kia thui .Củ chuối là em kô bit làm sao để in ra ,phải chăng em hàm print(DS *first) của em bị sai ?

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bạn chú ý, khi làm bài như này bạn cố gắng vẽ cái danh sách ra giấy, vừa hình dung vừa làm bài. Hàm in của bạn không vấn đề gì cả, nhưng ở một bước nào đó bạn làm đứt danh sách, thì khi đó hàm in không có kết quả là phải rồi. Cái này phải cẩn thận.

    Nhìn thoáng qua code trên của bạn, hàm in tên là print nhưng khi muốn gọi hàm này bạn lại gọi hàm printf, vấn đề ở đó chăng.

  8. #8
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Bài của bạn có khá nhiều lỗi , không biết mình nhận xét có đúng không nhưng cứ đưa ra để các bạn tham khảo . Thứ nhất bạn dùng hàm exit() mà không #include "stdlib.h" . Đúng như Mod QuangHoang nói hàm in ra của bạn viết là print() nhưng bạn lại dùng hàm printf() . Bạn cuibap sửa lỗi cho bạn gaconcode bạn chuyển hết hàm của bạn gaconcode sang void nhưng bạn lại truyền tham số cho hàm theo kiểu tham trị . Ý của bạn cuibap là sửa lại cho hàm trả về giá trị đầu danh sách vào biến first nhưng bạn truyền theo tham trị nên first không thay đổi giá trị -> first luôn là NULL ->danh sách các bạn tạo ra luôn rỗng .
    C Code:
    1. void Insert_head(DS *first,sinhvien  x) //con trỏ first truyền theo tham trị
    2.   {
    3.   DS *temp;
    4.   temp=(DS *)malloc(sizeof(DS));
    5.   temp->info=x;
    6.   temp->=first;
    7.   first=temp;
    8.   }
    9. void Insert_last(DS *first,sinhvien x )
    10.    {
    11.    DS *newnode;
    12.    DS *temp;
    13.    newnode= (DS *)malloc(sizeof(DS));
    14.    newnode->info=x;
    15.    newnode->next=NULL;
    16.    temp=first;
    17.    if(temp!=NULL)
    18.    {
    19.     while(temp->next!=NULL)
    20.       {
    21.          temp=temp->next;
    22.       }
    23.     temp->next=newnode;
    24.     }
    25.     else
    26.       first=newnode;
    27.     }
    28. void khoitao(DS *first)
    29.   {
    30.       first=NULL;
    31.   }
    Nếu sửa theo ý bạn cuibap thì bạn phải sửa lại truyền theo tham biến mình thử ví dụ với hàm khởi tạo :
    C Code:
    1. void khoitao(DS **first)
    2. {
    3.       *first=NULL;
    4. }
    OK còn Code của bạn gaconcode lúc đầu ý là đúng rồi các hàm của bạn ấy đều trả về giá trị là con trỏ trỏ vào danh sách móc nối . Nhưng cách bạn ấy sử dụng các hàm ấy lại sai .(PS:nếu bạn đã dùng hàm khởi tạo sao lúc đầu phải khởi tạo first có giá trị NULL lúc khai báo biến đó là công việc của hàm khoitao() chứ bạn đã khai báo first là biến toán cục thì không nên khai báo nó là biến cục bộ trong chương trình nữa chứ) .
    OK về hàm khởi tạo bạn sửa lại giống hàm của mình còn các hàm khác mình giữ nguyên(các hàm khác bạn sửa lại hết các trường hợp xảy ra với danh sách như bạn QuangHoang đã chỉ ra) . Mình chỉ chỉ ra cho bạn cách dùng các hàm của bạn ra sao :
    C Code:
    1. void menu(DS *first)
    2.   {
    3.   sinhvien x,y;
    4.   char c;
    5.   khoitao(&first);//sửa hàm khởi tạo như mình viết truyền theo tham biến
    6.   do
    7.   {
    8.   clrscr();
    9.   printf("\n 1.Them vao dau danh sach ");
    10.   printf("\n 2.Them vao cuoi danh sach :");
    11.   printf("\n 3.In ra man hinh :");
    12.   printf("\n 0.THoat ");
    13.   printf("\n");
    14.   printf("\n Nhap vao lua chon : ");
    15.   c=getch();
    16.   switch(c)
    17.    {
    18.    case '1' :
    19.        fflush(stdin);
    20.        printf("\n Nhap vao ten: ");
    21.        gets(x.ten);
    22.        printf("\n Nhap vao ma sinh vien ");
    23.        gets(x.masv);
    24.        printf("\n Nhap vao tuoi :");
    25.        scanf("%d",&x.tuoi);
    26.  
    27.        first=Insert_head(first,x);//theo cách các hàm bạn viết sử dụng thế  này mới đúng khi đó first mới chỉ đúng vào danh sách của bạn
    28.        break;
    29.    case '2' :
    30.        fflush(stdin);
    31.        printf("\n Nhap vao ten : ");
    32.        gets(y.ten);
    33.        printf("\n Nhap vao tuoi ");
    34.        scanf("%d",&y.tuoi);
    35.        printf("\n Nhap vao ma sinh vien ");
    36.        gets(y.masv);
    37.        first=Insert_last(first,y);//chỗ này
    38.        break;
    39.    case '3' : print(first);//hàm print
    40.         break;
    41.    case '0': exit(1);
    42.         break;
    43.    default : printf("\n ban da nhap sai phim chuc nang ");
    44.         break;
    45.       }
    46.       }
    47.   while(c!='0');
    48.    }
    Đó là mình sửa bài của bạn theo ý tưởng viết ban đầu của bạn . Theo mình nghĩ bạn nên viết chương trình nhất quán hơn sẽ dễ đọc dễ sửa lỗi và chú ý về cách truyền tham số cho hàm , cách trả về giá trị từ hàm .

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

  1. Bài tập C Quản Lý Sinh Viên Bằng Danh sách liên kết
    Gửi bởi thienshaman trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 16-04-2013, 07:52 AM
  2. Sử dụng danh sách liên kết để tạo chương trình quản lý sinh viên. Xin được giúp đỡ?
    Gửi bởi hieuboo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 12-05-2012, 10:50 AM
  3. Quản lí sinh viên bằng stack dùng danh sách liên kết. Làm sao để nhập nhiều sinh viên?
    Gửi bởi hoainamken trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 24-08-2011, 10:34 AM
  4. Kỹ thuật C Quản lí Sinh Viên Bằng Danh Sách liên kết trong lập trình C
    Gửi bởi kitti trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 01-04-2011, 09:17 PM
  5. [VC++ ] Danh sáchh liên kết - BT quản lí điểm sinh viên.
    Gửi bởi vuongngocnam trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 14-04-2010, 11:28 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